首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SSLContext中限制协议

在SSLContext中限制协议
EN

Stack Overflow用户
提问于 2013-11-20 18:06:21
回答 1查看 536关注 0票数 0

我有一个通过tomcat使用SSLv3协议的java服务器。

我正在创建一个java客户端,它将只使用SSLv3进行通信。此外,我正在使用Apache Http客户端进行http通信。下面是我正在使用的客户端代码片段。

代码语言:javascript
运行
复制
DefaultHttpClient httpClient = new DefaultHttpClient();
SSLContext ctx = SSLContext.getInstance("SSLv3");
TrustManager[] trustManagers = getTrustManagers("jks", new FileInputStream(new File("C:\\SSLKeyStore.ks")), "changeit");
ctx.init(null, trustManagers, new SecureRandom());
System.out.println("Context Protocol - " + ctx.getProtocol());

SSLSocketFactory factory = new SSLSocketFactory(ctx);
factory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

ClientConnectionManager manager = httpClient.getConnectionManager();
manager.getSchemeRegistry().register(new Scheme("https", 443, factory));

HttpGet httpget = new HttpGet("https://localhost:8844/getData");

System.out.println("executing request" + httpget.getRequestLine());

HttpResponse response = httpClient.execute(httpget);

问题是,当我启用'javax.net.debug=ssl'‘时,在我看到的日志中,我的客户端使用TLSv1,而我的服务器通过SSLv3正确通信。下面是日志的样子,

代码语言:javascript
运行
复制
*** ClientHello, TLSv1
***
main, WRITE: TLSv1 Handshake, length = 149
main, READ: SSLv3 Handshake, length = 1353
*** ServerHello, SSLv3

当我打印支持的协议时,我看到"SSLv3,TLSv1",因此我猜客户端显示的是更高版本的协议。

但这里的问题是,我如何限制客户端只使用"SSLv3“。我也尝试过设置https.protocols="SSLv3"。但这也无济于事。

寻找任何可能有帮助的解决方案/提示。

提前谢谢。

维基

EN

回答 1

Stack Overflow用户

发布于 2013-11-20 18:55:50

找到了解决这个问题的办法。

如果我将SSLSocketFactory子类化并将createSocket方法重写为"setEnabledProtocols"'SSLv3'。则通信与给定的完全相同,即客户端和服务器都使用SSLv3进行通信。

下面是调试交换,

代码语言:javascript
运行
复制
*** ClientHello, SSLv3
***
main, WRITE: SSLv3 Handshake, length = 149
main, READ: SSLv3 Handshake, length = 1353
*** ServerHello, SSLv3

然而,我对任何其他方法都持开放态度,这些方法更微妙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20092842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档