日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TLS协议的兼容性测试

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TLS协议的兼容性测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0導言

工作中遇到,系統服務內部調用增加對TLSv1.2協議的支持,因此做了兼容測試

1測試結果

如表,TLS有一個內置機制來協商是使用那個版本的協議,客戶端發送一個高版本協議,其中包含低版本協議,如果服務器不支持此高版本協議,他們將協議使用低版本協議。

2測試環境

jdk版本:

? 1.8,默認支持:[SSLv2Hello,SSLv3,TLSv1,TLS1.1,TLS1.2]

? 瀏覽器:

? 谷歌, 其版本80.0.3987.132(正式版本)(64位) 31以上就默認支持TLSv1.2

? 客戶端:

? httpClient 3.0

? 服務器

? Tomcat7 7以上版本支持TLSv1.2

3測試變量控制

變量1:tomcat服務端配置

? 準備:

? 1、使用jdk的keytools創建密鑰放入tomcat中

? 2、tomcat配置https,添加443端口,配置密鑰信息

? 通過修改tomcat7的配置文件,D:\Developtools\apache-tomcat-7.0.107\conf\server.xml

原https配置:

配置當前服務器只支持SSL\TLS協議的版本:
<Connector port=“443” protocol=“org.apache.coyote.http11.Http11Protocol”
maxThreads=“150” SSLEnabled=“true” scheme=“https” secure=“true”
clientAuth=“false” sslProtocol=“TLS” keystoreFIle=“D:\tomcat.keystore” keystorePass=“123456” sslEnabledProtocols="xxx" />
分別配置:

1. sslEnabledProtocols="TLSv1" (TLSv1等于SSLv3) 此配置后服務器端支持1.02. sslEnabledProtocols="TLSv1.1" 此配置后服務器端支持1.13. sslEnabledProtocols="TLSv1.2" 此配置后服務器端支持1.2

變量2:httpClient客戶端配置
修改MySecureProtocolSocketFactory類中sslcontext=SSLContext.getInstance(“xxx”)

分別配置:

1. sslcontext=SSLContext.getInstance("TLSv1.2")2. sslcontext=SSLContext.getInstance("TLSv1.1")3. sslcontext=SSLContext.getInstance("TLSv1")4. sslcontext=SSLContext.getInstance("SSLv3")5. sslcontext=SSLContext.getInstance("SSL")

注意1 客戶端配置高版本會兼容低版本(ps:只能拍照,懂得懂)

注意2
那么如何測試,當前客戶端發送的默認那種版本的協議呢?
抓包工具:Fiddler

代碼如下:

HttpsProxyGet類的關鍵點是設置抓包工具的代理

package com.java; import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.impl.client.DefaultHttpClient;public class HttpsProxyGet {public static void main(String[] args) throws Exception {SSLClient httpclient = new SSLClient();// 訪問的目標站點,端口和協議HttpHost targetHost = new HttpHost("www.baidu.com", 443, "https");// 代理的設置HttpHost proxy = new HttpHost("localhost", 8888);httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);// 目標地址HttpGet httpget = new HttpGet("/s");System.out.println("目標: " + targetHost);System.out.println("請求: " + httpget.getRequestLine());System.out.println("代理: " + proxy);// 執行HttpResponse response = httpclient.execute(targetHost, httpget);HttpEntity entity = response.getEntity();System.out.println("----------------------------------------");System.out.println(response.getStatusLine());if (entity != null) {System.out.println("Response content length: " + entity.getContentLength());}// 顯示結果BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}if (entity != null) {entity.consumeContent();}} } package com.java;import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient;/*** 用于進行Https請求的HttpClient* @ClassName: SSLClient* @Description: TODO* @author Devin <xxx>**/ public class SSLClient extends DefaultHttpClient {public SSLClient() throws Exception{super();SSLContext ctx = SSLContext.getInstance("TLSv1");X509TrustManager tm = new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain,String authType) throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain,String authType) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return null;}};ctx.init(null, new TrustManager[]{tm}, null);SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);ClientConnectionManager ccm = this.getConnectionManager();SchemeRegistry sr = ccm.getSchemeRegistry();sr.register(new Scheme("https", 443, ssf));} }

抓包結果: 與 SSLContext ctx = SSLContext.getInstance(“TLSv1”)中配置一致,默認高版本

4測試思路及過程

思路:
1、使用谷歌瀏覽器與提供端服務器建立連接訪問,可驗證到當前服務器協議版本。

調用谷歌瀏覽器,按F12查看:

2、消費者端發起服務調用,即使用httpClient發起https請求,查看服務調用情況。

變量1和變量2交叉改變,進行測試

測試結果共15種,在文章頭表中。

5結語

文章梳理可能有點亂,對這塊還是半只半知半解。
-----重言

總結

以上是生活随笔為你收集整理的TLS协议的兼容性测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。