超文本传输协议(HTTP,HyperText Transfer Protocol),默认端口:80html
2012年google提出的SPDY方案,主要解决:java
能够当作是SPDY的升级版。android
(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,即HTTP下加入SSL层,端口:443算法
官方推荐:Android推荐方案浏览器
/**
* HTTPS未知的证书颁发机构处理方法
* Android客户端存储证书
*
* @param input 待信任的CA证书流
* @return SSLContext
*/
public static SSLContext getSSLContext(InputStream input) {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate ca = cf.generateCertificate(input);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
sslContext.init(null, tmf.getTrustManagers(), null);
input.close();
return sslContext;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return null;
}
复制代码
/**
* 单独使用SSL + HTTP时
* @param trustManagers
* @return
*/
public static SSLContext getSSLContext(TrustManager[] trustManagers) {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, null);
return sslContext;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return null;
}
public static TrustManager[] sDefaultTrustManagers = new TrustManager[] {new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// TODO: 2018/1/23双向校验中,向服务端发客户端证书
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// TODO: 2018/1/23 双向校验中,校验服务端证书
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}};
public static HostnameVerifier sHostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
// 不验证主机名
return true;
}
};
复制代码