2020/05/14 更新

PCI DSS 不合规和 SSL CVE-2016-2107 漏洞修复 都需要重新检测,SSL CVE-2016-2107 漏洞修复 里面提到的 专项测试 可能因为网络状态一直无法返回结果,国外的 SSL 检测网站 也因为网络状态查询速度较慢,推荐使用 国内的测试

为什么按照要求更新了 OpenSSL 版本,也修改了 TLS 协议相关的配置,但检测结果仍然不理想呢?

不管是 SSL CVE-2016-2107 漏洞修复 还是当前的 PCI DSS 不合规,在最后都需要重启服务器,前者还需要重启 PHP-FPM。

为什么我重启了服务器,检测结果还是没有变化呢?需要检查两点:

  • Apache 服务器下 httpd 服务状态是否为 httpd dead but subsys locked
  • 国内的 SSL 测试 报告检测时间是否为当前时间

这两点都是我自己碰到的情况,按照流程做了所有的操作,我也以为应该没事了,但事实并不如意。多次重启服务器无果,甚至下载了 openssl CVE-2016-2107 漏洞检测 - 我是地瓜 - cnblogs 作者拿专项测试里 git 源码进行编译的可执行脚本放到服务器上测试,显示 Vulnerable true,意思这项是存在漏洞的,检测阳性。这意味着我们的改动在服务器环境中没有生效。

我的服务器是 httpd 2.2.27 版本,openssl version 返回 OpenSSL 1.0.1t 3 May 2016,ssl 协议也按照下面的教程改了。每次重启服务器都是直接 pkill httpd,然后 service httpd start,虽然服务状态总是有点不正常 httpd dead but subsys locked。今天是想解决这个服务器状态不正常的问题,先杀死所有httpd 进程,然后删除 /var/lock/subsys/httpd(锁文件,系统关闭的过程(发出关闭信号,调用服务自身的进程)中会检查 /var/lock/subsys 下的文件,逐一关闭每个服务,如果某一运行的服务在 /var/lock/subsys 下没有相应的选项,在系统关闭的时候,会像杀死普通进程一样杀死这个服务。),service httpd start 启动服务,虽然服务状态没有达到预期 is running...,但用上面下载的测试脚本执行,检测阴性,漏洞排除了。惊不惊喜,意不意外? (╯‵□′)╯︵┴─┴

无心插柳柳成荫。后面用 国内的 SSL 测试 检测,刷新报告,当前状态都正常了。

ps:国内的检测网站报告里有一个相关域名,其实就是 www.xx.com 子域名 和 xx.com 的主域名,显示红色,评级还是 F。这个不用去纠结,其实都是一个站点,看检测日期就知道是之前的报告了。这些网站检测一次,会把你的检测报告存起来,估计会做一些数据分析,不用理会。


通过 https://myssl.com/ 网站检测 SSL 服务情况,概述里提到 PCI DSS 不合规。

myssl.com 检测结果
myssl.com 检测结果

PCI DSS 是什么?

以下部分内容摘自:HTTPS 安全最佳实践 — 更严格的PCI DSS合规标准

PCI DSS,全称 Payment Card Industry Data Security Standard,第三方支付行业数据安全标准,是由PCI安全标准委员会制定,力在使国际上采用一致的数据安全措施。

早在去年6月30号PCI安全标准委员会官方发表博文将于2018年6月30号(最晚),也就是本月月底禁用早期SSL/TLS,并实施更安全的加密协议(TLS v1.1或更高版本,强烈建议使用TLS v1.2)以满足PCI数据安全标准的要求,从而保护支付数据。

随着时间的临近,我们提前调整了PCI DSS合规判定标准(在原有的标准之上,支持TLS v1.0或更早的加密协议将会判定为不合规),方便您提前调整您的服务以避免违规的风险。

所以,出现 PCI DSS 不合格大概率就是采用了 TLS v1.0 或更早的加密协议。所以配置指南里的推荐配置 TLSv1 TLSv1.1 TLSv1.2 应该是 TLSv1.1 TLSv1.2(openssl1.0.1+ 版本支持 TLS1.1 和 TLS1.2协议,openssl1.1.1,支持 TLS 1.3)。

Nginx 的配置方法:

ssl_protocols TLSv1.1 TLSv1.2;

Apache 配置方法:

SSLProtocol all -TLSv1 -SSLv2 -SSLv3

不论是 Nginx 还是 Apache 都有对 SSL 有独立的配置文件,里面有默认的虚拟主机设置,记得要同步修改,或者注释掉默认的虚拟主机配置。在修改完配置后需要重启服务器。