Java 如何控制Tomcat可用的SSL密码

Java 如何控制Tomcat可用的SSL密码,java,tomcat,ssl,encryption,Java,Tomcat,Ssl,Encryption,我无法在Tomcat中禁用弱SSL密码,因为在许多地方都有记录,例如… 目前,我的连接器如下所示: ..Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SH

我无法在Tomcat中禁用弱SSL密码,因为在许多地方都有记录,例如…
目前,我的连接器如下所示:

..Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" clientAuth="false" sslProtocol="TLS" keystoreFile="C:\Programs\apache-tomcat-6.0.33\keystore" keystorePass="nn"/>
当我尝试连接(使用IE或ssldigger)时,Tomcat中出现以下错误:

java.lang.IllegalArgumentException: Unsupported ciphersuite  SSL_RSA_WITH_RC4_128_SHA
    at com.sun.net.ssl.internal.ssl.CipherSuite.valueOf(Unknown Source)
    at com.sun.net.ssl.internal.ssl.CipherSuiteList.<init>(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.setEnabledCipherSuites(Unknown Source)
    at org.apache.tomcat.util.net.NioEndpoint.createSSLEngine(NioEndpoint.java:1141)
    at org.apache.tomcat.util.net.NioEndpoint.setSocketOptions(NioEndpoint.java:1096)
    at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:1315)
    at java.lang.Thread.run(Unknown Source)
java.lang.IllegalArgumentException:不支持的密码套件SSL\U RSA\U和\U RC4\U 128\U SHA
位于com.sun.net.ssl.internal.ssl.CipherSuite.valueOf(未知源)
位于com.sun.net.ssl.internal.ssl.CipherSuiteList。(来源未知)
位于com.sun.net.ssl.internal.ssl.SSLEngineImpl.setEnablediPhone套件(未知源)
位于org.apache.tomcat.util.net.NioEndpoint.CreateSLengine(NioEndpoint.java:1141)
位于org.apache.tomcat.util.net.NioEndpoint.setSocketOptions(NioEndpoint.java:1096)
位于org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:1315)
位于java.lang.Thread.run(未知源)
顺便说一句,我删除了不受支持的密码(几乎一个接一个),剩下的唯一一个似乎受支持的密码是SSL_RSA_with_RC4_128_MD5

另外,我假设一个不受支持的密码与Tomcats的特定密钥对无关,而是更普遍地与广泛可用的密码有关


这里出了什么问题?

我想出来了。逗号分隔的密码列表是对空格敏感的,也就是说,罪魁祸首是逗号后面的空格字符。

告诉Tomcat版本不会有什么坏处,因为这取决于连接块中可以使用哪些标记。我对运行在Tomcat6.0上的web服务也有类似的问题,例如,我已经读过

ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,..." 
可能无法正常工作,因为“密码”可能需要与SSLCipherSuite一样SSLCipherSuite,但我不能100%确定这一点。使我认为这可能适用的文档位于以下位置:。在同一页中,还说分隔符不是逗号(,),而是冒号(:)。 因此,对于Tomcat 6.0,我建议使用:

SSLCipherSuite="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:..."


希望这能帮助那些不得不与Tomcat 6.0抗争的人(忽略Tomcat 6.0.XX或更高版本的答案)。

如果这个答案有效,你也可以接受,这里有相当重要的信息。哇,是的。这救了我的命。我已经研究这个问题将近12个小时了,找到了这个答案。这应该在屋顶上喊出来。如果密码套件是用openssl符号指定的,那么冒号(:)将用作分隔符。APR连接器使用OpenSSL。否则为逗号(,)
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:..."