Mr. Wen的学习记录! VPS推荐 聊聊网站启用SSL后让PCIDSS合规,让评价达到A+级别

聊聊网站启用SSL后让PCIDSS合规,让评价达到A+级别

广告位

目前来说无论是个人站长还是企业官网基本上都启用了HTTPS,这里就不在赘述为什么启用https了,网站类似的文章一搜一大把,今天且来聊聊怎么让证书检测的时候呈现A+标签,有钱的大佬(买SSL证书的)您可以离开了,毕竟在看下去就是耽误你的时间啦。

SSL.jpg

我使用SSL/TLS安全评估报告官网检测的,网址文章底部有,感兴趣的童鞋可以是测试下,首先上图,看下我的检测结果:

image.png

评级:A+

ATS:合规

PCI DSS:合规

如果你也希望这样那么跟我一起优化呗,首先确保你网站的SSL证书检测是A级别,正常来说免费的SSL证书,无论是腾讯云还是阿里云又或者其他证书机构都应该是A级别的。然后我们才能锦上添花,将评级提升至A+,其他检测结果不到A+官网已经给出了解决办法,一起来看看怎么说的:

如何达到A+ 

首先要是,这个评分,并不仅仅是针对于证书的部署情况而言的,这是一个多方面综合的评级。其中包括了证书、SSL协议、加密套件、漏洞、不安全的外链等等。如果您的网站的评分已经达到A,那么没有被评到A+的最大的可能性就是没有使用HSTS,使用HSTS的方法很简单,只要在添加Strict-Transport-Security这个HTTP头部信息即可。

Nginx:

 PHP

add_header Strict-Transport-Security "max-age=31536000";

需要注意的是Strict-Transport-Security中的max-age的时间不能小于15552000秒。

教程官网给出了,但是这个什么http头信息放在哪?怎么放啊?没有说明啊,其他这个很简单,只需要放在你网站的伪静态规则就行,如果是宝塔主机的话,不放在伪静态里面,放在网站配置文件里面是最好的。

步骤:如下,登录你的宝塔面板,然后左侧—网站—找到你的网站,最右侧有个设置,点击设置—然后在弹出的对话框找到左侧的—配置文件—看图

image.png

直接天下如上代码,保存,然后重载配置或者重启nginx服务即可,然后在回到MySSL官网更新报告就OK了,你就会发现已经SSL已经提升至A+级别,看着很舒服啊。这是强迫症患者可能会发现,为什么你检测的PCI DSS合规,我的却显示不合规呢?就你眼尖是么,夸夸你观察力惊人是么?切。关于这个问题,我们就要先了解下什么是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或更早的加密协议将会判定为不合规),方便您提前调整您的服务以避免违规的风险。

解决此问题的方案是:

禁用TLS1.0

同样以宝塔为例,找到网站,点击设置,点击配置文件,把原来的:

 PHP

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

替换

 PHP

ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

看图:大概位置,毕竟每个人设置方式不同,位置可能也不大相同,你可以百度CTRL+F,查找。

image.png

如图可以用#注释,也可以删除原来的,然后保存重载配置或者重启nginx服务器,然后在重新检测下SSL,就合规了。至于为什么我的智商和知识是解答不出来的,但是官方给出了答复:

在未来我们的安全评级也将对TLS1.0做出合适的降级处理,在评估兼容性影响后,还是建议大家关闭TLS1.0, 现在TLS1.3都出来了,未来主流应该是TLS1.2+TLS1.3。

大多数是比较老旧系统上自带浏览器不支持,如果是主流用户使用的Chrome、Firefox和国产浏览器基本都兼容的。

至此所有问题都已经迎刃而解,其实关于禁用TLS1.0我们也可以直接删除TLSv1就好了,因为你也不确定你的nginx是否支持TLSv1.3,如果不支持的话,这么写还可能导致出错,顺带把检测代码献上:

宝塔面板,文件,点击如图按钮,调用终端,输入以下命令:

image.png

 PHP

nginx -t

如果返回值如图,那么没有问题。

image.png

如果不是这样的话,就不能填写TLSv1.3,只能删除TLSv1,如图:

image.png

好了,就啰嗦这么多吧,有问题的留言吧,我知道你会问,我的主机是Apache或者你的主机不是宝塔怎么办,那么我可以明确的告诉我,我~不~知~道,因为我没有别的服务器了,没法调试,哈哈,,,就喜欢你看不惯我又干不掉我的样子~~~

哦对了,这是MySSL官网:SSL/TLS安全评估报告

PS:想要我的角标那我就给你,放在主题配置—首页设置—统计代码里面就行了:

 Markup

<div id="cc-myssl-id" style="position: fixed;right: 5px;bottom: 0;width: 65px;height: 65px;z-index: 99;">
  <a href="https://myssl.com/seal/detail?domain=你的域名" rel="nofollow" target="_blank">
    <img src="https://www.talklee.com/zb_users/upload/2019/02/myssl-id-logo-2.png" alt="https安全认证" style="width:100%;height:100%">
  </a>
</div>

把域名和图片换成自己的就行了。

测试时如果出现以下问题会影响A+级别的判定

This site works only in browsers with SNI support.

SNI 是什么 (参考:This site works only in browsers with SNI support – 木瓜园

简单来说 SNI 是 TLS 的一个功能扩展,有了 SNI 就可以在单个 IP 上启用多个 SSL 证书,现实一点说就是可以在只有一个 IP 地址的 VPS 上建立两个或更多的 https 网站了。

检测 nginx 是否启用 SNI

$ nginx -V
nginx version: nginx/1.4.7
built by gcc 4.7.2 (Debian 4.7.2-5) 
TLS SNI support enabled

Server Name Indication (SNI) is an extension to the TLS computer networking protocol by which a client indicates which hostname it is attempting to connect to at the start of the handshaking process. This allows a server to present multiple certificates on the same IP address and TCP port number and hence allows multiple secure (HTTPS) websites (or any other Service over TLS) to be served off the same IP address without requiring all those sites to use the same certificate. It is the conceptual equivalent to HTTP/1.1 name-based virtual hosting, but for HTTPS. The desired hostname is not encrypted, so an eavesdropper can see which site is being requested.

To make SNI useful, as with any protocol, the vast majority of visitors must use web browsers that implement it. Users whose browsers do not implement SNI are presented with a default certificate and hence are likely to receive certificate warnings.

因此只要在客户端请求时,如果没有指明域名,那么就返回一个默认证书。

How to define which SSL certificate nginx sends first with SNI?

The default_server setting of the listen directive should determine which certificate is sent for a request without SNI set in the handshake. Change the listen directive of the desired default:

listen 443 default_server ssl;

本文来自网络,不代表Mr. Wen的学习记录!立场,转载请注明出处。

作者: admin

本人小白,什么也不懂,请教别人快被人嘲笑死了,不如自己学习下。不要问我,我什么也不会。
上一篇
下一篇
广告位

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部