使用MySSL(https://myssl.com/)进行SSL评级,我们固然希望看到如下结果
But通常我们可能会遇到诸多问题,例如
今天我们主要讨论一下关于启用HSTS、配置加密套件顺序、禁用TLS1.0这三个问题,基本上可以达到A+级别,符合目前的相关规范
启用HSTS
评测提示:开启HSTS后能够提升到A+,具体请参考 《HTTPS安全与兼容性配置指南》
Nginx
在官方提供的相关指南中仅提供了Nginx的配置方法,Nginx服务器配置非常简单,只需要添加一行代码
最近发现有很多
blog
主在他们的blog
中推荐我们MySSL
,这让我们非常惊喜,在这里首先感谢一下这些blog
主对我们MySSL
的推广。
但是在看到 给启用 SSL 的站点推荐个 HTTPS 专用工具网站 的评论中,有一些blog
主对如何评到A
以及A+
不是很理解,这里简单的说明一下。
首先要是,这个评分,并不仅仅是针对于证书的部署情况而言的,这是一个多方面综合的评级。其中包括了证书
、SSL协议
、加密套件
、漏洞
、不安全的外链
等等。如果您的网站的评分已经达到A
,那么没有被评到A+
的最大的可能性就是没有使用HSTS
,使用HSTS
的方法很简单,只要在添加Strict-Transport-Security
这个HTTP
头部信息即可。
用nginx
服务器做说明:add_header Strict-Transport-Security "max-age=31536000";但有一点需要注意,
Strict-Transport-Security
中的max-age
的时间不能小于15552000
。
Apache
下面提供Apache服务器的配置方法
首先启用headers模块,可以手动修改配置文件启动:
# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过) LoadModule headers_module modules/mod_headers.so
也可以在SSH中直接使用命令行启动:
sudo a2enmod headers
然后在SSL配置文件中(就是配置SSL证书的那个文件)添加代码
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
展开多虚拟主机配置后大致类似如下
<VirtualHost _default_:443> ServerName abc.com:443 DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key #添加1行HSTS配置 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>
配置符合PFS规范的加密套件
降级原因中提示:1. 没有优先使用FS系列加密套件,降级为B
配置指南中提示:1. 需要配置符合PFS规范的加密套件,推荐配置:
ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE ;
Apache
还是上面那个SSL配置文件,添加如下代码
SSLCipherSuite 配置加密套件顺序 SSLHonorCipherOrder on #启用根据服务器配置选择加密套件顺序功能,这行放在上面下面均可
例如参考MySSL官方提供的配置,则两行代码为:
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE SSLHonorCipherOrder on
展开多虚拟主机配置后大致类似如下
<VirtualHost _default_:443> ServerName abc.com:443 DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key #添加2行证书配置 SSLHonorCipherOrder on SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE #添加1行HSTS配置 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>
禁用(关闭)过时的TLS 1.0版本
此问题不会导致SSL评级降级,而是会有PCI DSS不合规提示
并给出参考指南:
PCI安全标准委员会规定2018年6月30日之后,开启TLS1.0将导致PCI DSS不合规,
具体参考:《更严格的PCI DSS合规标准》
Nginx
在官方提供的《更严格的PCI DSS合规标准》中提供了Nginx服务器的配置方法:
评估兼容性后,禁用TLS1.0
nginx
,如下所示:ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;调整之后别忘了再检测一下。
Apache
阿帕奇配置也很简单,一句代码
依然在上面的SSL配置文件中添加代码:
SSLProtocol ALL -SSLv2 -SSLv3 -TLSv1
可以禁用过时的SSL 2、SSL 3、TLS 1版本
展开多虚拟主机配置后大致类似如下
<VirtualHost _default_:443> ServerName abc.com:443 DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key #添加3行证书配置 SSLHonorCipherOrder on SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE SSLProtocol ALL -SSLv2 -SSLv3 -TLSv1 #添加1行HSTS配置 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>
展开SSL核心配置内容
SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.crt SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLHonorCipherOrder on SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE SSLProtocol ALL -SSLv2 -SSLv3 -TLSv1 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
以上修改apache配置文件后均不要忘记重启apache服务,例如(apache开启关闭重启方法命令很多)
sudo service apache2 restart
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫
评论