1. 程式人生 > >HTTPs TLS1.2 請求模擬測試

HTTPs TLS1.2 請求模擬測試

以下工具可以用來測試TLS1.2證書是否生效:

第一個類:

package com.firstdata.TLStool;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;

/**
 * 實現用於主機名驗證的基介面。
 * 在握手期間,如果 URL 的主機名和伺服器的標識主機名不匹配,則驗證機制可以回撥此介面的實現程式來確定是否應該允許此連線。
 */
public class MyHostnameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        if ("localhost".equals(hostname)) {
            return true;
        } else {
            return false;
        }
    }
}

主要測試類:

package com.firstdata.TLStool;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.KeyStore;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

public class httpsClitents {
    static int i = 0;

    /**
     * 獲得KeyStore.
     * 
     * @param keyStorePath
     * 金鑰庫路徑
     * @param password
     * 密碼
     * @return 金鑰庫
     * @throws Exception
     */
    public static KeyStore getKeyStore(String password, String keyStorePath) throws Exception {
        // 例項化金鑰庫
        KeyStore ks = KeyStore.getInstance("JKS");
        // 獲得金鑰庫檔案流
        FileInputStream is = new FileInputStream(keyStorePath);
        // 載入金鑰庫
        ks.load(is, password.toCharArray());
        // 關閉金鑰庫檔案流
        is.close();
        return ks;
    }

    /**
     * 獲得SSLSocketFactory.
     * 
     * @param password
     * 密碼
     * @param keyStorePath
     * 金鑰庫路徑
     * @param trustStorePath
     * 信任庫路徑
     * @return SSLSocketFactory
     * @throws Exception
     */
    public static SSLContext getSSLContext(String password, String keyStorePath, String trustStorePath)
            throws Exception {
        // 例項化金鑰庫
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        // 獲得金鑰庫
        KeyStore keyStore = getKeyStore(password, keyStorePath);
        // 初始化金鑰工廠
        keyManagerFactory.init(keyStore, password.toCharArray());

        // 例項化信任庫
        TrustManagerFactory trustManagerFactory = TrustManagerFactory
                .getInstance(TrustManagerFactory.getDefaultAlgorithm());
        // 獲得信任庫
        KeyStore trustStore = getKeyStore(password, trustStorePath);
        // 初始化信任庫
        trustManagerFactory.init(trustStore);
        // 例項化SSL上下文
        SSLContext ctx = SSLContext.getInstance("TLS");
        // 初始化SSL上下文
        ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
        // 獲得SSLSocketFactory
        return ctx;
    }

    /**
     * 初始化HttpsURLConnection.
     * 
     * @param password
     * 密碼
     * @param keyStorePath
     * 金鑰庫路徑
     * @param trustStorePath
     * 信任庫路徑
     * @throws Exception
     */
    public static void initHttpsURLConnection(String password, String keyStorePath, String trustStorePath)
            throws Exception {
        // 宣告SSL上下文
        SSLContext sslContext = null;

        // 例項化主機名驗證介面
        HostnameVerifier hnv = new MyHostnameVerifier();
        try {
            sslContext = getSSLContext(password, keyStorePath, trustStorePath);
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
        if (sslContext != null) {
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
        }
        HttpsURLConnection.setDefaultHostnameVerifier(hnv);
    }

    /**
     * 傳送請求.
     * 
     * @param httpsUrl
     * 請求的地址
     * @param xmlStr
     * 請求的資料
     */
    public static void post(String httpsUrl, String xmlStr) {
        HttpsURLConnection urlCon = null;
        try {
            urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection();
            urlCon.setDoInput(true);
            urlCon.setDoOutput(true);
            urlCon.setRequestMethod("POST");
            urlCon.setRequestProperty("Content-Length", String.valueOf(xmlStr.getBytes().length));
            urlCon.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
            urlCon.setUseCaches(false);
            // 設定為gbk可以解決伺服器接收時讀取的資料中文亂碼問題
            urlCon.getOutputStream().write(xmlStr.getBytes("utf-8"));
            urlCon.getOutputStream().flush();
            urlCon.getOutputStream().close();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
            String line;

            while ((line = in.readLine()) != null) {
                i++;
                System.out.println(line + "----  第" + i + "條");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 測試方法.
     * 
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        // 密碼
        String password = "123456";
        // 金鑰庫
        String keyStorePath = "C:/Program Files/Java/jdk1.7.0_79/bin/kclient.keystore";
        // 信任庫
        String trustStorePath = "C:/Program Files/Java/jdk1.7.0_79/bin/tclient.keystore";
        // 本地起的https服務
        String httpsUrl = "https://localhost:27890/httpsSubmit";
        // 傳輸文字
        String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><MESSAGE>" + "</MESSAGE>";

        httpsClitents.initHttpsURLConnection(password, keyStorePath, trustStorePath);
        // 發起請求
        httpsClitents.post(httpsUrl, xmlStr);

    }
}

以下是如何使用p7b證書檔案來生成keystore:

開啟p7b證書檔案,點選copy to file生成Base-64 encoded X.509(.CER)檔案,可以獲得.CER的證書檔案
通過以下命令將.CER檔案匯入keystore金鑰庫:

C:\java\jdk1.8.0_65\bin\keytool -importcert -trustcacerts -file D:\CER\TestCer.cer -keystore D:\CER\TestKey.keystore -storepass 12345678 -keypass 12345678

相關推薦

HTTPs TLS1.2 請求模擬測試

以下工具可以用來測試TLS1.2證書是否生效: 第一個類: package com.firstdata.TLStool; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; /

傳送基於TLS1.2HTTPS請求

本文主要介紹瞭如何傳送基於TLS1.2安全協議的HTTPS請求 由於目前對網路安全越來越重視,我們會在HTTP的基礎上加上一些安全協議 目前最為廣泛所使用的安全協議是TLS1.2 很多服務端容器都已經支援通過配置來設定HTTPS的埠從而支援HTTPS協議 在傳送HTTPS的

在iOS9中,蘋果將原http協議改成了https協議,使用 TLS1.2 SSL加密請求資料。如何解決報錯

今天將Xcode升級至Xcode7,執行時發現有報錯~ 控制檯報錯如下: Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is ins

【洛谷·NOIP模擬測試一·2017/10/2】考後心得與檢討

學校 個人 亦或 優化 有時 的人 noip 容易 更多 本來這次考試是很容易的,T1、T2都讓我感覺是水題,T3我也能一眼秒正解。 可是...因為個人粗心的原因,我最後拿了一個不理想的分數。 我在這裏寫下此文,謹記本次模擬賽之失利,今後的考試再接再厲。 題目分析 T1 0

【11.2晚校內測試】【裝桶模擬】【單調棧】

真的是fo了,晚上還來一次測試...... mister【問題描述】 不久前 Mister 從太空中探測到一個奇怪的訊號,他開始研究這個訊號。 經過一些變換後,這個訊號變成了長度為 n 的排列或者它的迴圈移位。對於進一步的研究 Mister 需要一些資料分析,這就是為什麼他決定選擇這個排列的迴圈移位,它

6.2 Demo 模擬單元測試

package com.xiaowei.mytest; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPoli

測試http請求的Chrome外掛:Postman外掛的查詢&&安裝&&模擬測試 - 講解篇

一個測試http請求的Chrome外掛:Postman 本文簡述一下這個Chrome外掛:Postman外掛的查詢、下載、安裝。 這裡需要VPN,具體原因你懂的。 Chrome資源查詢下載、安裝 如上圖所示,開啟google瀏覽器,點選左上角“應

POST請求模擬工具、JSON請求工具、http介面測試、post介面測試

地址: apiDebug-API介面除錯外掛,開源API介面除錯外掛,Restfull介面除錯軟體,Restfull介面除錯外掛,谷歌API介面除錯外掛,Chrome瀏覽器介面除錯外掛,POST請求模擬外掛,api介面除錯工具,開源介面除錯工具,POST模擬工具

MockMvc模擬請求進行測試

1.ContextConfiguration載入配置檔案的時候,也要載入SpringMvc的配置檔案2.模擬請求的時候需要一個很重要的物件org.springframework.test.web.servlet.MockMvc   MockMvc,該物件被初始化時需要方法 M

微信小程式 https 配置 IIS中開啟TLS1.2

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols] [HKEY_LOCAL_MACHINE\SYSTEM\

阿里雲ECS windows 2008 R2 開啟TLS1.2問題,HTTPS部署解決

第一步:獲取阿里雲免費的SSL證書部署到IIS伺服器中,步驟如下:執行 輸入MMC ,點選檔案-》新增/刪除單元管理選擇計算機賬戶,下一步,點選完成選擇到證書根目錄下,右鍵空白區域,所有任務,選擇匯入,遊覽,解壓後的證書資料夾點選下一步,輸入阿里雲下載證書解壓後文件裡的,中的

Junit4 模擬requert請求進行測試

package com.hytera.mrps.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.

測試http請求的Chrome外掛:Postman外掛的查詢&&安裝&&模擬測試

一個測試http請求的Chrome外掛:Postman 本文簡述一下這個Chrome外掛:Postman外掛的查詢、下載、安裝。 這裡需要VPN,具體原因你懂的。 Chrome資源查詢下載、安裝

Springboot+Junit 模擬測試 Get請求

controller類裡面 @RestController public class Controller { @Autowired private Repository repository; /** * @Description

2. 移動端測試工具 :bugtags

測試工具 csdn 使用 article https tag 使用說明 net http http://blog.csdn.net/objectivepla/article/details/51037804 Bugtags 使用說明 https://www.bu

5-2 時間模擬

pan get ont 時間 operator right 測試 謝謝 第一個 給出下面的基類Time的框架如下: class Time {protected: int second; int minute; int hour; public:

win2008 r2 開啟TLS1.2

2008 r2 mac prot net disable 4.5 cmd efault gist Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C

模擬測試(vj6)

ret 實現 print 模擬 n-1 lap nod += rime 之前的vj5,6由於還有幾個問題沒有解決掉,所以暫且先不總結。今天做vj7總算磕磕絆絆ak掉了,感覺不錯~ T1.運用貪心的方法,遍歷一遍字符串,如果以這個點開頭的字符串沒有被訪問過,就標記一下,輸出

自己主動化測試程序之中的一個自己定義鍵盤的模擬測試程序(C語言)

nds per oid 尾指針 應用 tro scan number 實現 一、測試程序編寫說明 我們做的終端設備上運行的是QT應用程序。使用自己定義的鍵盤接口。經過測試人員長時間的人機交互測試,來確認系統的功能是否滿足需求。如今須要編寫一個自己主動化

LibreOJ #514. 「LibreOJ β Round #2模擬只會猜題意

clas oid loj gist mem bsp num clu n) 二次聯通門 : LibreOJ #514. 「LibreOJ β Round #2」模擬只會猜題意 /* LibreOJ #514. 「LibreOJ β Round #2