Java使用SSLContext请求https
首先了解下重要的类
SSLContext 安全套接字协议的实现核心类
SSLSocket 扩展自Socket的用户客户端
SSLSocketFactory 工厂类
SSLServerSocket 扩展自ServerSocket用于服务端
KeyStore 密钥证书
KeyManager 密钥管理器
TrustManager 信任管理器
X590TrustedManager TrustManager的子接口,管理X509证书,验证远程链接
public class HttpsUtil {
// 首先新建一个信任管理对象
private static class TrustAnyTrustManager implements X509TrustManager {
// 检查客户端的证书
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
// 检查服务端的证书
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
//返回受信任的X509证书数组
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
public static byte[] post(String url, String content, String charset) {
//获取一个SSLContext实例
SSLContext s = SSLContext.getInstance("SSL");
//初始化SSLContest.init(可以导入的证书,信任管理器,SecureRandom) 三个参数都可以为null, 没有证书的写null就行
SSLContext.init(null, new TrustManager[] {new TrustAnyTrustManager }, new java.security.SecureRandom());
URL console = new URL();
HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.setDoOutput(true);
conn.connect();
}
}

浙公网安备 33010602011771号