https://weakdh.org/sysadmin.html上的Tomcat修复列出的非GCM密码是否有错别字?
在“Apache Tomcat”标题下和“在server.xml文件(对于JSSE)”文本下面,有以下连接器密码configuration。
我的问题涉及底部的14个密码(名称中没有GCM的密码)
(为了便于阅读,添加了新行)
<Connector ciphers="[GCM Ciphers], TLS_ECDHE_RSA_WITH_AES_128_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_SHA256, TLS_ECDHE_RSA_WITH_AES_128_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_SHA, TLS_ECDHE_RSA_WITH_AES_256_SHA384, TLS_ECDHE_ECDSA_WITH_AES_256_SHA384, TLS_ECDHE_RSA_WITH_AES_256_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_SHA, TLS_DHE_RSA_WITH_AES_128_SHA256, TLS_DHE_RSA_WITH_AES_128_SHA, TLS_DHE_DSS_WITH_AES_128_SHA256, TLS_DHE_RSA_WITH_AES_256_SHA256, TLS_DHE_DSS_WITH_AES_256_SHA, TLS_DHE_RSA_WITH_AES_256_SHA " />
应该是这些CBC密码吗?
<Connector ciphers="[GCM Ciphers], TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA " />
看来他们错过了CBC_的名字。
例:
TLS_DHE_RSA_WITH_AES_256_SHA应该是TLS_DHE_RSA_WITH_AES_256_ CBC_ SHA。 根据https://www.openssl.org/docs/apps/ciphers.html ,后者存在,而前者不存在。
如果您查看weakdh.org网站上的其他修复程序,则可以看到其他产品使用不同的密码命名约定。 使用OpenSSL密码列表,您可以将这些名称映射到Tomcat使用的名称,并找出它们映射到CBC密码。
我尝试使用从我的server.xml中发布的weakdh.org密码,但它没有效果。 如果即使是一个密码拼写错误或者不是一个合法的密码名称,Tomcat也会忽略这些密码,并且Tomcat会回退到使用JVM的默认密码。 将CBC_添加到密码名称后,Tomcat开始使用“连接器密码”属性中列出的密码。
weakdh.org解决scheme是否有错别字,或者我错过了什么?
weakdh.org的密码似乎对你的系统是无效的,所以,是的,它回落到默认值。 weakdh.org上列出的那些可能在其他一些他们testing的系统上工作,或者他们可能完全是错误的,我不能完全确定,但是我知道的是他们不在这里 ,所以他们可能无法在任何地方。
要获得系统的有效密码套件列表,请参阅http://markmail.org/message/zn4namfhypyxum23 :
来自:克里斯托弗·舒尔茨(Chr … @ christopherschultz.net)
所有,
为了跟进,下面的代码可以用于获取当前可用的SSL密码,并显示它们是否在特定的JVM中启用。 请注意,这些都不是Tomcat特有的:
import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import javax.net.ssl.SSLServerSocketFactory; public class SSLInfo { public static void main(String[] args) throws Exception { SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault(); String[] defaultCiphers = ssf.getDefaultCipherSuites(); String[] availableCiphers = ssf.getSupportedCipherSuites(); TreeMap ciphers = new TreeMap(); for(int i=0; i<availableCiphers.length; ++i ) ciphers.put(availableCiphers[i], Boolean.FALSE); for(int i=0; i<defaultCiphers.length; ++i ) ciphers.put(defaultCiphers[i], Boolean.TRUE); System.out.println("Default\tCipher"); for(Iterator i = ciphers.entrySet().iterator(); i.hasNext(); ) { Map.Entry cipher=(Map.Entry)i.next(); if(Boolean.TRUE.equals(cipher.getValue())) System.out.print('*'); else System.out.print(' '); System.out.print('\t'); System.out.println(cipher.getKey()); } } }
编译上面的内容并从命令行运行java SSLInfo来获取系统的有效密码string列表。