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();
} }