最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何使用SSLContext請(qǐng)求https鏈接

 更新時(shí)間:2024年01月23日 10:14:13   作者:大魔王King  
這篇文章主要介紹了Java如何使用SSLContext請(qǐng)求https鏈接問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用SSLContext請(qǐng)求https鏈接

先了解幾個(gè)關(guān)鍵類

  • SSLContext 安全套接字協(xié)議的實(shí)現(xiàn)核心類
  • SSLSocket 擴(kuò)展自Socket用戶客戶端
  • SSLSocketFactory 工廠類
  • SSLServerSocket 擴(kuò)展自ServerSocket用于服務(wù)端
  • SSLServerSocketFactory SSLServerSocket的工廠
  • KeyStore 密鑰證書
  • KeyManager 密鑰管理器
  • TrustManager 信任管理器
  • X590TrustedManager TrustManager的子接口,管理X509證書,驗(yàn)證遠(yuǎn)程鏈接

核心代碼

如下:

    //首先自己實(shí)現(xiàn)信任管理器類,創(chuàng)建一個(gè)X509TrustManager對(duì)象
    X509TrustManager x509m = new X509TrustManager() {  
    	//返回受信任的X509證書數(shù)組
        @Override  
        public X509Certificate[] getAcceptedIssuers() {  
            return null;  
        }  
        //檢查服務(wù)器的證書,若不信任該證書拋出異常,可以不檢查默認(rèn)都信任
        @Override  
        public void checkServerTrusted(X509Certificate[] chain,  
                String authType) throws CertificateException {  
        }  
   	    //檢查客戶端證書,若不信任該證書拋出異常,咱們自己就是客戶端不用檢查
        @Override  
        public void checkClientTrusted(X509Certificate[] chain,  
                String authType) throws CertificateException {  
        }  
    };  
    // 獲取一個(gè)SSLContext實(shí)例,核心對(duì)象  
    SSLContext s = SSLContext.getInstance("SSL");  
    // 初始化SSLContext.init(可以導(dǎo)入的證書,信任管理器,SecureRandom) 三個(gè)參數(shù)都可為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(); 
    //發(fā)送數(shù)據(jù)
    DataOutputStream out = new DataOutputStream(output);
    out.writeBytes("測試發(fā)送數(shù)據(jù)");
    out.flush();
    out.close();
    //接收數(shù)據(jù)
    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()); //打印返回的數(shù)據(jù)
    

這就是Java最原始的使用SSLContext創(chuàng)建SSLSocket發(fā)送https請(qǐng)求。

如果使用框架如okhttp httpclient 底層已經(jīng)實(shí)現(xiàn)https請(qǐng)求,CA機(jī)構(gòu)頒發(fā)的證書或者權(quán)威機(jī)構(gòu)頒發(fā)的證書都是直接信任的 直接使用即可不需要再重寫任何代碼,網(wǎng)上的好多文章說的都有點(diǎn)問題,我已經(jīng)親測可用,對(duì)于自己生成的證書的https服務(wù)才需要另外配置SSLContext這套代碼。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

武威市| 出国| 塔河县| 尼木县| 涿鹿县| 尼勒克县| 凉城县| 陵水| 拉孜县| 永顺县| 临泉县| 河津市| 永定县| 建平县| 德化县| 蛟河市| 海盐县| 定南县| 右玉县| 庄河市| 梁河县| 马边| 苍溪县| 大竹县| 平舆县| 博罗县| 焉耆| 米林县| 桂平市| 永登县| 乌兰浩特市| 方山县| 惠州市| 休宁县| 万宁市| 呼和浩特市| 柏乡县| 陇西县| 垣曲县| 甘德县| 拉萨市|