MySSL HTTPS 评级 B 升 A+

背景

MySSL 提供了免费的网站 HTTPS 安全评级服务,而后我用个人网站 https://hellogithub.com,测试了一下。发现安全评级为 B,最高为 A+。下面是记录个人网站从 B 升到 A+ 的操做和设置。html

tips: 个人网站免费 SSL/TLS 证书是这家的 Let's Encryptlinux

1、B 升 A

1.1 现状

评分提示:服务器支持弱 DH 密钥交换参数,降级为 B nginx

1.2 缘由

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

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

全部版本的 nginx(如1.4.4)都依赖于 OpenSSL 给 Diffie-Hellman (DH)的输入参数。不幸的是,这意味着 Diffie-Hellman Ephemeral(DHE)将使用 OpenSSL 的默认设置,包括一个用于密钥交换的1024位密钥。由于咱们正在使用2048位证书,DHE 客户端就会使用一个要比非 DHE 客户端更弱的密钥交换。算法

MySSL 提示的由于:如今用的 DHE 参数小于 1024 位数。浏览器

1.3 解决办法

  1. /etc/letsencrypt 目录下查看是否有:ssl-dhparams.pem 文件
  2. 若是有则直接设置 nginx 配置:ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

若是没有,则须要本身生成,生成后配置 nginx 注意路径:安全

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

tips:生成该参数十分消耗 CPU 资源,在线上服务执行必定要注意!服务器

1.4 结果

2、A 升 A+

2.1 现状

评分提示:开启HSTS后可以提高到A+,具体参考《XXXXX》 dom

2.2 缘由

HSTS(HTTP Strict Transport Security)是国际互联网工程组织IETF发布的一种互联网安全策略机制。采用HSTS策略的网站将保证浏览器始终链接到该网站的HTTPS加密版本,不须要用户手动在URL地址栏中输入加密地址,以减小会话劫持风险。

MySSL 提示的由于:须要在开启 HSTS,保证浏览器链接该网站始终为 HTTPS 加密版本。

2.3 解决办法

修改 nginx 配置:

server {
    server_name hellogithub.com www.hellogithub.com;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    .....
}

2.4 结果

参考

相关文章
相关标签/搜索