java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java使用SSLContext请求https链接

Java如何使用SSLContext请求https链接

作者:大魔王King

这篇文章主要介绍了Java如何使用SSLContext请求https链接问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用SSLContext请求https链接

先了解几个关键类

核心代码

如下:

    //首先自己实现信任管理器类,创建一个X509TrustManager对象
    X509TrustManager x509m = new X509TrustManager() {  
    	//返回受信任的X509证书数组
        @Override  
        public X509Certificate[] getAcceptedIssuers() {  
            return null;  
        }  
        //检查服务器的证书,若不信任该证书抛出异常,可以不检查默认都信任
        @Override  
        public void checkServerTrusted(X509Certificate[] chain,  
                String authType) throws CertificateException {  
        }  
   	    //检查客户端证书,若不信任该证书抛出异常,咱们自己就是客户端不用检查
        @Override  
        public void checkClientTrusted(X509Certificate[] chain,  
                String authType) throws CertificateException {  
        }  
    };  
    // 获取一个SSLContext实例,核心对象  
    SSLContext s = SSLContext.getInstance("SSL");  
    // 初始化SSLContext.init(可以导入的证书,信任管理器,SecureRandom) 三个参数都可为null,没有证书填写null就行
    s.init(null, new TrustManager[] { x509m },   new java.security.SecureRandom());
    //获取SSLSocket 用于通信
    SSLSocketFactory factory = s.getSocketFactory();
    SSLSocket s = (SSLSocket) factory.createSocket("localhost", port);
    //获取输入输出流
    OutputStream output = s.getOutputStream(); 
    InputStream input = s.getInputStream(); 
    //发送数据
    DataOutputStream out = new DataOutputStream(output);
    out.writeBytes("测试发送数据");
    out.flush();
    out.close();
    //接收数据
    Reader reader = new InputStreamReader(input, "UTF-8");
    BufferedReader bufferedReader = new BufferedReader(reader);
    String str = null;
    StringBuffer sb = new StringBuffer();
    while ((str = bufferedReader.readLine()) != null) {
        sb.append(str);
    }
    reader.close();
    System.out.println(sb.toString()); //打印返回的数据
    

这就是Java最原始的使用SSLContext创建SSLSocket发送https请求。

如果使用框架如okhttp httpclient 底层已经实现https请求,CA机构颁发的证书或者权威机构颁发的证书都是直接信任的 直接使用即可不需要再重写任何代码,网上的好多文章说的都有点问题,我已经亲测可用,对于自己生成的证书的https服务才需要另外配置SSLContext这套代码。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文