【发布时间】:2013-11-20 10:06:20
【问题描述】:
我有一个通过 tomcat 使用 SSLv3 协议的 java 服务器。
我正在创建一个只使用 SSLv3 进行通信的 java 客户端。此外,我正在使用 Apache Http 客户端进行 http 通信。下面是我正在使用的客户端代码的sn-p,
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 正确通信。下面是日志的样子,
*** ClientHello, TLSv1
***
main, WRITE: TLSv1 Handshake, length = 149
main, READ: SSLv3 Handshake, length = 1353
*** ServerHello, SSLv3
当我打印支持的协议时,我看到“SSLv3,TLSv1”,因此我猜客户端显示的是更高版本的协议。
但这里的问题是我如何限制客户端仅使用“SSLv3”。我也试过设置https.protocols="SSLv3"。但这也无济于事。
寻找任何可能有帮助的解决方案/提示。
提前致谢。
维姬
【问题讨论】:
标签: java tomcat ssl https httpclient