Tomcat传出SSL

Tomcat传出SSL,tomcat,ssl,two-way,Tomcat,Ssl,Two Way,我有一个托管在Tomcat上的应用程序,它需要联系并通过IBMDataPower设备对托管的服务进行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] ht

我有一个托管在Tomcat上的应用程序,它需要联系并通过IBMDataPower设备对托管的服务进行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_和_RC4_128_SHA


因此,我的问题是:当Tomcat向外部实体发出请求/响应时,我可以控制密码套件吗?

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

如果你发布了你的客户代码的示例,或者提到了它是用什么语言编写的,那么应该有人能够帮助你。
在Java中,使用对象配置SSL设置非常容易。

对不起,我认为通过使用Tomcat,人们会知道它是Java。在本例中,我通过将密码套件作为Tomcat启动的一部分输入来控制密码套件,即在/usr/sbin/tomcat7启动脚本中设置系统属性https.cipherSuites=“其中一个密码套件”。您可以了解本文档支持哪些密码套件:

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

如果您使用进行出站呼叫,除了使用https.cipherSuites属性,您必须从以下位置调用useSystemProperties()方法:

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


我能够部分回答我自己的问题。基于,我可以使用https.cipherSuites系统属性指定密码套件。然而,正如所指出的,缺点是这种方法随后适用于整个系统。
HttpClient client = HttpClientBuilder.create()
                      .useSystemProperties()
                      .build();
client.execute(...)
HttpClientBuilder.create()
    .setSSLSocketFactory(new SSLConnectionSocketFactory(
       (SSLSocketFactory) SSLSocketFactory.getDefault(), null,
       new String[] {"TLS_RSA_WITH_RC4_128_SHA"},
             SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER))
    .build();