【问题标题】:Securing tomcat7 - Disabling RC4 does not work保护 tomcat7 - 禁用 RC4 不起作用
【发布时间】:2015-05-18 09:18:36
【问题描述】:

我正在尝试保护我的 tomcat 7 设置。我目前有两个问题,这是我的第一个问题:

我基本上使用默认配置,我只是扩展了 ssl 配置以在 SSL Labs 上获得 A 评级。

我的问题是我想禁用 RC4,因为它不安全,所以我添加了我信任的密码套件(嗯,它是 list of Mozilla)它以 !aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK 结尾,这意味着 AFIK 不应该使用这些算法用过的。但是这里还是用RC4是我的完整配置(不带cmets):

<Server port="8005" shutdown="SHUTDOWN">
 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               redirectPort="8443" />
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" SSLHonorCipherOrder="true"
               SSLDisableCompression="true" SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK"
               SSLCertificateChainFile="/root/ca.crt"
               SSLCACertificatePath="/etc/ssl/certs"
               keystoreFile="/path/to/keystore" keystorePass="pwd" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

如果你知道我做错了什么,请告诉我。

【问题讨论】:

    标签: ssl tomcat7


    【解决方案1】:

    您已像使用 APR / OpenSSL 一样格式化密码套件列表,但仍配置为使用 NIO 连接器,该连接器将依赖 Java 进行连接,因此密码列表需要该格式.将您喜欢的套件放入逗号分隔的列表中(没有套件类别,只有显式配置),重新启动,看看是否不能为您解决问题。

    可以在此处找到 Oracle Java 8 密码名称:http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html

    您可以使用此连接器:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" SSLHonorCipherOrder="true"
               SSLDisableCompression="true" ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_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_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_GCM_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"
               keystoreFile="/path/to/keystore" keystorePass="pwd" />
    

    【讨论】:

    • 不用担心。祝你好运!
    • 我还在玩这个。你知道kEDH+AESGCM 做什么吗?关于ECDHE-RSA-WITH-AES-128-SHA256 可以翻译成TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256GCMCBC 的区别是什么意思?其中一些字符串只有一种翻译,而不是两种翻译都会有问题吗? !aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK 怎么翻译?这甚至可能吗?
    • 你有一个很长的命名密码列表;我不会尝试翻译后面的命令(“!anull:!des 等),因为它们不直接应用于 Java / Tomcat 世界。简而言之,它们会提供使用哪些密码的规则,而Tomcat只允许显式配置。用你有的列表进行测试,如果你出于兼容性原因注意,可能会在列表中添加一两个。CBC / GCM与消息完整性有关。意见不一,但我自己是尽管 CBC 完全可以接受并且通常需要兼容性,但 GCM 最好在可用的情况下使用。
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2010-09-24
    相关资源
    最近更新 更多