1

我有一个托管在 Tomcat 上的应用程序,它需要通过 IBM DataPower 设备对托管的服务进行 HTTPS 调用。我在日志中看到以下内容:

http-bio-8080-exec-1, READ: TLSv1 Alert, length = 2
http-bio-8080-exec-1, RECV TLSv1 ALERT:  fatal, handshake_failure
%% Invalidated:  [Session-1, TLS_RSA_WITH_AES_256_CBC_SHA]
http-bio-8080-exec-1, called closeSocket()

DataPower 设备不支持该密码套件,它支持 TLS_RSA_WITH_RC4_128_SHA。

所以,我的问题是:在从 Tomcat 到外部实体的传出请求/响应中,我可以控制密码套件吗?

4

3 回答 3

0

抱歉,我想通过暗示 Tomcat,人们会知道它是 Java。在这种情况下,我通过将密码套件作为 Tomcat 启动的一部分输入来控制密码套件,即。在 /usr/sbin/tomcat7 启动脚本中设置系统属性 -https.cipherSuites="one of the cipher suites"。您可以在本文档中找到支持哪些密码套件:http: //docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html

正如我所提到的,不利的一面是,我输入的受限密码集现在限制了整个 Tomcat 安装。在我的情况下这没什么大不了的,它是一个专门用于单一目的的安装,但我指出它以防有人正在阅读这篇文章并且在他们的 Tomcat 安装下运行多个应用程序。

于 2015-02-01T17:22:47.257 回答
0

如果您的应用程序是 HTTPS 客户端,您应该能够在源代码中为建立连接的对象配置 SSL 上下文。

如果您发布客户端代码示例或提及它是用什么语言编写的,那么应该有人可以帮助您。在 Java 中,使用对象配置 SSL 设置非常容易SSLContext

于 2015-01-31T07:28:02.537 回答
0

如果您使用httpcomponents进行出站调用,除了使用https.cipherSuites属性外,您还必须从HttpClientBuilder调用useSystemProperties()方法:

HttpClient client = HttpClientBuilder.create()
                      .useSystemProperties()
                      .build();
client.execute(...)

或者,如果您想将此密码套件设置为此客户端可用(它不需要https.cipherSuites属性):

HttpClientBuilder.create()
    .setSSLSocketFactory(new SSLConnectionSocketFactory(
       (SSLSocketFactory) SSLSocketFactory.getDefault(), null,
       new String[] {"TLS_RSA_WITH_RC4_128_SHA"},
             SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER))
    .build();
于 2015-08-26T16:49:39.867 回答