Java使用SSLContext请求https链接

Java使用SSLContext请求https链接

先了解几个关键类
SSLContext 安全套接字协议的实现核心类
SSLSocket 扩展自Socket用户客户端
SSLSocketFactory 工厂类
SSLServerSocket 扩展自ServerSocket用于服务端
SSLServerSocketFactory SSLServerSocket的工厂
KeyStore 密钥证书
KeyManager 密钥管理器
TrustManager 信任管理器
X590TrustedManager TrustManager的子接口,管理X509证书,验证远程链接
核心代码如下:

    //首先自己实现信任管理器类,创建一个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这套代码。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值