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

 

  

posted @ 2023-06-03 15:13  云里雾里的测试  阅读(847)  评论(0编辑  收藏  举报