我的 tomcat(7.0.52)连接器配置了一个密码列表,如 ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
所有这些都受服务器上安装的 openjdk1.7 支持(已验证)。
使用 keytool 初始化密钥库,使用
keytool -genkey -alias Tomcat -keyalg RSA -sigalg SHA256withRSA -keysize 2048 ...
在 ssl 握手调试输出中,我可以看到客户端提供了这些密码,但服务器仅选择 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,这不是最强的:
ClientHello, TLSv1.2Jul 04, 2014 2:38:31 PM org.apache.coyote.AbstractProtocol start
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,...
Extension elliptic_curves, curve names: {secp256r1, secp384r1, secp521r1}
Extension ec_point_formats, formats: [uncompressed]
Unsupported extension type_35, data:
Unsupported extension type_13172, data:
Extension signature_algorithms, signature_algorithms: SHA256withRSA, SHA384withRSA, SHA1withRSA, SHA256withECDSA, SHA384withECDSA, SHA1withECDSA, Unknown (hash:0x4, signature:0x2), SHA1withDSA
***
Jul 04, 2014 2:38:31 PM org.apache.catalina.startup.Catalina start
%% Initialized: [Session-1, SSL_NULL_WITH_NULL_NULL]
matching alias: tomcat
% Negotiating: [Session-1, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
如果我从 tomcat 的密码列表中删除 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,则使用 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA。如果我同时删除 TLS_ECDHE_RSA_WITH_AES_xxx,则会出现握手失败(没有共同的密码)。
我无法弄清楚配置中缺少什么或者有什么问题。
非常感谢任何意见...
答案1
您的密码应按优先顺序列出。
但你TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
之前列出过TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
。
尝试在列表中颠倒它们的顺序。
您可能还希望重新排序整个列表,以便所有 256 位密码出现在所有 128 位密码之前。
您还需要SSLHonorCipherOrder="true"
在您的 中进行设置<Connector>
。