调整ssl_protocols以便符合更严格的 PCI DSS 合规标准

chosen1cwp 2021年09月14日 444次浏览

背景

现有人管系统今年因为监管的原因,做了等保3.0测评,测评机构出了测评报告《等保3.0测试报告》,其中一条整改报告如下:

Web 服务器支持通过 TLS 1.0 进行加密。当用于保护传入或传出网站的敏感信息时,TLS 1.0 不被视为 PCI 数据安全标准 3.2(.1) 定义和要求的“强密码术”。根据 PCI 的说法,“2018 年 6 月 30 日是禁用 SSL/早期 TLS 并实施更安全的加密协议 - TLS 1.1 或更高(强烈建议使用 TLS v1.2)以满足 PCI 数据安全标准 (PCI DSS) 的截止日期) 以保护支付数据。攻击者可能能够利用此问题进行中间人攻击并解密受影响的服务和客户端之间的通信。

dbzg1

dbzg2

整改意见

存在TLS 1.0,建议禁用TLS 1.0,并将其替换成TLS 1.2 或更高版本

整改方案

前期已经购买了沃通的ssl证书,并配置了https访问,配置方案参考了沃通数字证书安装配置指南文档,现在需要修改配置禁用TLSv1.0,这里需要区分Tomcat版本,不同的版本对应不同的解决方案。人管系统使用Tomcat版本是8.5使用第2种方案。

  • 1、Tomcat 8.5 之前的版本
    只需要修改Tomcat的配置文件server.xml即可
    <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" connectionTimeout="20000" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="keystore/domain.jks" keystorePass="证书密码" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2+TLSv1.1" keystoreType="PKCS12" ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,SSL_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />
    
  • 2、Tomcat 8.5 以及之后的版本
    修改Tomcat的配置文件server.xml
    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" defaultSSLHostConfigName="agent.zjbxjj.com">
      <SSLHostConfig protocols="TLSv1.1,TLSv1.2" hostName="agent.zjbxjj.com">
          <Certificate certificateKeystoreFile="keystore/domain.jks" certificateKeyAlias="别名" certificateKeystorePassword="证书密码" type="RSA" />
      </SSLHostConfig>
     </Connector>
    

    重启Tomcat后,检查后发现仍旧支持TLSv1,原因是tomcat官方并没有给8.5+版本,禁用TLSv1的方式,所以另外一个思路解决问题,修改jre的安全配置文件(配置支持的加密算法、tls不支持忽略的算法)jre/lib/security/java.security,找到配置项jdk.tls.disabledAlgorithms追加上 TLSv1, 如下

    vim /opt/jdk1.8.0_181/jre/lib/security/java.security
    jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \
       EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC, TLSv1
    :wq!
    

    重启Tomcat,检查发现不支持TLSv1,大功告成!

最后

检测地址 myssl,该网站检测后会对检测结果进行缓存,修改配置重启Tomcat后,重新检测时务必 点击 右上角 [刷新报告] 清除缓存生成新报告。

dbzg3

检测报告-客户端握手模拟列表可以看到,禁用TLSv1.0,老版本的客户端或浏览器,就无法兼容了,握手失败的,就表示无法访问的。

dbzg4

后续追加

等保测评复测结果出炉,还不符合要求,原因是协议支持这块还是黄色,好奇怪,测评机构反馈说是因为协议加密等级不强,弱 导致的。

原来测评机构使用的测试工具:ssllabs

查资料一下午,最终发现其实协议支持这块黄色的真是原因是没有禁用TLS1.1导致的,并非协议加密强度不够。

重新修改了Tomcat的配置文件server.xml,去掉TLSv1.1,protocols="TLSv1.2"

  <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" defaultSSLHostConfigName="agent.zjbxjj.com">
    <SSLHostConfig protocols="TLSv1.2" hostName="agent.zjbxjj.com">
        <Certificate certificateKeystoreFile="keystore/domain.jks" certificateKeyAlias="别名" certificateKeystorePassword="证书密码" type="RSA" />
    </SSLHostConfig>
   </Connector>

重启Tomcat服务后,清除ssllabs上的缓存报告,重新测评就会发现全绿

如下图:

1634552622361.jpg

1634552653497.jpg