如何在ssllabs测试中得到A+

如何在ssllabs测试中得到A+

IT, 其他

SSL可以保护传输安全,它也有不同的安全等级。ssllabs.com有着一个相应的评级方案,可以评价服务器配置的SSL协议安全程度。想要得到A+的评级那么需要对服务器设置进行一些调整。下面以Nginx配置为例,通过添加下面的一些参数可以让SSL传输更加安全。

首先需要得到一个有效的SSL证书及其证书链。一般来说使用let’s encrypt, comodo等证书即可但是需要注意的是如果想要在Key Exchange评分中得到100分,则需要提供至少4096bit的证书。

选择特定的协议:

虽然Nginx默认的协议支持是完整的,但是我们需要排除一些不太安全的协议类型,尽管这样会不得不忽视一小部分用户,例如WindowsXP用户。他们需要通过已经不再安全的老旧协议进行连接。一般来说目前使用TLS1.0-1.2即可,如果要求安全程度比较高则可以只允许TLS1.2协议。


ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

选择密码类型:

这里也同样面临着兼容/安全的选择。在这里我选择AES256bit密码。值得注意的是,如果要加入更多密匙类型支持,那么就需要小心这些类型的排列,应当从最佳加密到最好的兼容排列。


ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

或者希望提高兼容:


ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;

前向安全性的配置(Forward Secrecy)

前向安全性(Forward Secrecy)的概念:客户端和服务器协商一个永不重用的密钥,并在会话结束时销毁它。服务器上的 RSA 私钥用于客户端和服务器之间的 Diffie-Hellman 密钥交换签名。从 Diffie-Hellman 握手中获取的预主密钥会用于之后的编码。因为预主密钥是特定于客户端和服务器之间建立的某个连接,并且只用在一个限定的时间内,所以称作短暂模式(Ephemeral)。

如果使用前向安全机制,攻击者取得了一个服务器的私钥,他是不能解码之前的通讯信息的。这个私钥仅用于 Diffie Hellman 握手签名,并不会泄露预主密钥。Diffie Hellman 算法会确保预主密钥绝不会离开客户端和服务器,而且不能被中间人攻击所拦截。

默认状态下虽然nginx也使用这项加密但是会使用默认的1024密匙,因此我们应当替换成自己生成的


openssl dhparam -out dhparam.pem 4096

并且在nginx配置中加入


ssl_dhparam /your/path/to/dhparam.pem;

HTTP 严格传输安全(HSTS)(HTTP Strict Transport Security)

添加一个http报头给浏览器,那么接下来的有效期内,浏览器与服务器之间沟通则只会选择https,所有的http都会被自动重写到https协议。

# Enable HSTS
add_header Strict-Transport-Security max-age=63072000;

# Do not allow this site to be displayed in iframes
add_header X-Frame-Options DENY;

# Do not permit Content-Type sniffing.
add_header X-Content-Type-Options nosniff;

配置 OCSP

连接到一个服务器时,客户端应该使用证书吊销列表(CRL)或在线证书状态协议(OCSP)记录来校验服务器证书的有效性。为了防止申请超时,我们允许服务器在 TLS 握手中发送缓存的 OCSP 记录,以绕开 OCSP 响应服务器。这个机制减少了客户端和 OCSP 响应服务器之间的通讯,称作 OCSP 装订。


ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;

那么最后添加的配置如下:


ssl on;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
ssl_prefer_server_ciphers on;

ssl_certificate /etc/ssl/website.com.crt;
ssl_certificate_key /etc/ssl/website.com.key;
ssl_dhparam /etc/ssl/dhparam.pem;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;

add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

Amefs, EFS, IT, Wordpress
上一篇文章
月色真美 BDRip 制作感受
下一篇文章
NEKOPARA OVA WebRip 制作

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Fill out this field
Fill out this field
请输入有效的邮箱地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

keyboard_arrow_up