我正在复制我们的一位客户报告的问题。
他在AIX 7.1上使用IBM JRE 7运行Tomcat 7。
Tomcat定义了HTTPS连接器:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
keystoreFile="/path/to/keystore.key" keystorePass="password"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
密钥库包含1024位DSA密钥对。
当HTTPS请求进入时,DSA密钥不会被初始化,这会导致握手失败。
来自catalina.out的输出-Djavax.net.debug=all
:
%% Initialized: [Session-2, SSL_NULL_WITH_NULL_NULL]
ssl: ServerHandshaker.setupPrivateKeyAndChain EC_EC
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain RSA
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain EC_EC
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain EC_RSA
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
%% Invalidated: [Session-2, SSL_NULL_WITH_NULL_NULL]
如果我切换到IBM JRE 8,则初始化密钥:
%% Initialized: [Session-1, SSL_NULL_WITH_NULL_NULL]
ssl: ServerHandshaker.setupPrivateKeyAndChain EC_EC
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain RSA
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain EC_EC
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain EC_RSA
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain RSA
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias null
ssl: ServerHandshaker.setupPrivateKeyAndChain DSA
matching alias: mykey
ssl: ServerHandshaker.setupPrivateKeyAndChain, chooseServerAlias mykey
ssl: ServerHandshaker.setupPrivateKeyAndChain, return true
JsseJCE: Using KeyPairGenerator DiffieHellman from provider TBD via init
DHCrypt: DH KeyPairGenerator from provider from init IBMJCE version 1.8
%% Negotiating: [Session-1, SSL_DHE_DSS_WITH_AES_128_CBC_SHA]
我们的客户表示,同一个密钥库在Tomcat 6中使用相同的JRE 7。
我在以下环境中对原始密钥库进行了一些测试:
AIX
oslevel -s
7100-04-04-1717
爪哇
Java7 - IBM JRE - java7_64_SR3 (also SR10_FP1)
Java8 - IBM JRE - java8_64_SR3_FP22
Tomcat的
apache-tomcat-6.0.36
apache-tomcat-7.0.69
apache-tomcat-8.5.16
结果是:
工作:
Tomcat 6 + Java 7
Tomcat 6 + Java 8
Tomcat 7 + Java 8
Tomcat 8 + Java 8
无效:
Tomcat 7 + Java 7
Tomcat 8 + Java 7
使用IMB JRE 7运行Tomcat 7/8时似乎存在一些问题,但在其他组合中则没有。
安装JRE只是为了重现这个问题。
我真的无法找到它不能在这些组合中工作的原因。
任何想法可能是什么原因或我可以尝试什么?
编辑:由于其他限制,仅使用JRE 8是不可能的。 我们通过提供具有2048位RSA密钥的密钥库来实现解决方法,该密钥库适用于所有组合。如果不知道原始密钥库的问题是什么,仍然真的不满意。