2023年6月21日发(作者:)
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.23测试变量控制变量1:tomcat服务端配置 准备: 1、使⽤jdk的keytools创建密钥放⼊tomcat中 2、tomcat配置https,添加443端⼝,配置密钥信息 通过修改tomcat7的配置⽂件,D:原https配置:配置当前服务器只⽀持SSLTLS协议的版本:分别配置: 1. sslEnabledProtocols="TLSv1" (TLSv1等于SSLv3) 此配置后服务器端⽀持1.0 2. sslEnabledProtocols="TLSv1.1" 此配置后服务器端⽀持1.1 3. sslEnabledProtocols="TLSv1.2" 此配置后服务器端⽀持1.2变量2:httpClient客户端配置修改MySecureProtocolSocketFactory类中sslcontext=tance(“xxx”)分别配置: 1. sslcontext=tance("TLSv1.2") 2. sslcontext=tance("TLSv1.1") 3. sslcontext=tance("TLSv1") 4. sslcontext=tance("SSLv3") 5. sslcontext=tance("SSL")注意1 客户端配置⾼版本会兼容低版本(ps:只能拍照,懂得懂)注意2那么如何测试,当前客户端发送的默认那种版本的协议呢?抓包⼯具:Fiddler 代码如下:HttpsProxyGet类的关键点是设置抓包⼯具的代理package ;import edReader;import treamReader;import tity;import st;import sponse;import ope;import mePasswordCredentials;import t;import utePNames;import tHttpClient;public class HttpsProxyGet { public static void main(String[] args) throws Exception { SSLClient httpclient = new SSLClient(); //
访问的⽬标站点,端⼝和协议 HttpHost targetHost = new HttpHost("", 443, "https"); //
代理的设置 HttpHost proxy = new HttpHost("localhost", 8888); ams().setParameter(T_PROXY, proxy); //
⽬标地址 HttpGet httpget = new HttpGet("/s"); n("⽬标: " + targetHost); n("请求: " + uestLine()); n("代理: " + proxy); //
执⾏ HttpResponse response = e(targetHost, httpget); HttpEntity entity = ity(); n("----------------------------------------"); n(tusLine()); if (entity != null) { n("Response content length: " + tentLength()); } //
显⽰结果 BufferedReader reader = new BufferedReader(new InputStreamReader(tent(), "UTF-8")); String line = null; while ((line = ne()) != null) { n(line); } if (entity != null) { eContent(); } }}package ;import icateException;import .X509Certificate;import text;import anager;import .X509TrustManager;import ConnectionManager;import ;import Registry;import ketFactory;import tHttpClient;/** *
⽤于进⾏Https请求的HttpClient * @ClassName: SSLClient * @Description: TODO * @author Devin * */public class SSLClient extends DefaultHttpClient { public SSLClient() throws Exception{ super(); SSLContext ctx = tance("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; } }; (null, new TrustManager[]{tm}, null); SSLSocketFactory ssf = new SSLSocketFactory(ctx,_ALL_HOSTNAME_VERIFIER); ClientConnectionManager ccm = nectionManager(); SchemeRegistry sr = emeRegistry(); er(new Scheme("https", 443, ssf)); }}抓包结果: 与 SSLContext ctx = tance(“TLSv1”)中配置⼀致,默认⾼版本4测试思路及过程思路:1、使⽤⾕歌浏览器与提供端服务器建⽴连接访问,可验证到当前服务器协议版本。调⽤⾕歌浏览器,按F12查看:2、消费者端发起服务调⽤,即使⽤httpClient发起https请求,查看服务调⽤情况。变量1和变量2交叉改变,进⾏测试测试结果共15种,在⽂章头表中。5结语⽂章梳理可能有点乱,对这块还是半只半知半解。-----重⾔
2023年6月21日发(作者:)
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.23测试变量控制变量1:tomcat服务端配置 准备: 1、使⽤jdk的keytools创建密钥放⼊tomcat中 2、tomcat配置https,添加443端⼝,配置密钥信息 通过修改tomcat7的配置⽂件,D:原https配置:配置当前服务器只⽀持SSLTLS协议的版本:分别配置: 1. sslEnabledProtocols="TLSv1" (TLSv1等于SSLv3) 此配置后服务器端⽀持1.0 2. sslEnabledProtocols="TLSv1.1" 此配置后服务器端⽀持1.1 3. sslEnabledProtocols="TLSv1.2" 此配置后服务器端⽀持1.2变量2:httpClient客户端配置修改MySecureProtocolSocketFactory类中sslcontext=tance(“xxx”)分别配置: 1. sslcontext=tance("TLSv1.2") 2. sslcontext=tance("TLSv1.1") 3. sslcontext=tance("TLSv1") 4. sslcontext=tance("SSLv3") 5. sslcontext=tance("SSL")注意1 客户端配置⾼版本会兼容低版本(ps:只能拍照,懂得懂)注意2那么如何测试,当前客户端发送的默认那种版本的协议呢?抓包⼯具:Fiddler 代码如下:HttpsProxyGet类的关键点是设置抓包⼯具的代理package ;import edReader;import treamReader;import tity;import st;import sponse;import ope;import mePasswordCredentials;import t;import utePNames;import tHttpClient;public class HttpsProxyGet { public static void main(String[] args) throws Exception { SSLClient httpclient = new SSLClient(); //
访问的⽬标站点,端⼝和协议 HttpHost targetHost = new HttpHost("", 443, "https"); //
代理的设置 HttpHost proxy = new HttpHost("localhost", 8888); ams().setParameter(T_PROXY, proxy); //
⽬标地址 HttpGet httpget = new HttpGet("/s"); n("⽬标: " + targetHost); n("请求: " + uestLine()); n("代理: " + proxy); //
执⾏ HttpResponse response = e(targetHost, httpget); HttpEntity entity = ity(); n("----------------------------------------"); n(tusLine()); if (entity != null) { n("Response content length: " + tentLength()); } //
显⽰结果 BufferedReader reader = new BufferedReader(new InputStreamReader(tent(), "UTF-8")); String line = null; while ((line = ne()) != null) { n(line); } if (entity != null) { eContent(); } }}package ;import icateException;import .X509Certificate;import text;import anager;import .X509TrustManager;import ConnectionManager;import ;import Registry;import ketFactory;import tHttpClient;/** *
⽤于进⾏Https请求的HttpClient * @ClassName: SSLClient * @Description: TODO * @author Devin * */public class SSLClient extends DefaultHttpClient { public SSLClient() throws Exception{ super(); SSLContext ctx = tance("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; } }; (null, new TrustManager[]{tm}, null); SSLSocketFactory ssf = new SSLSocketFactory(ctx,_ALL_HOSTNAME_VERIFIER); ClientConnectionManager ccm = nectionManager(); SchemeRegistry sr = emeRegistry(); er(new Scheme("https", 443, ssf)); }}抓包结果: 与 SSLContext ctx = tance(“TLSv1”)中配置⼀致,默认⾼版本4测试思路及过程思路:1、使⽤⾕歌浏览器与提供端服务器建⽴连接访问,可验证到当前服务器协议版本。调⽤⾕歌浏览器,按F12查看:2、消费者端发起服务调⽤,即使⽤httpClient发起https请求,查看服务调⽤情况。变量1和变量2交叉改变,进⾏测试测试结果共15种,在⽂章头表中。5结语⽂章梳理可能有点乱,对这块还是半只半知半解。-----重⾔
发布评论