Nginx完全正向保密(perfect forward secrecy)设置

完全正向保密(perfect forward secrecy)是信息安全中提出的观点。要求一个密钥只能访问由它所保护的数据;用来产生密钥的元素一次一换,不能再产生其他的密钥;一个密钥被破解,并不影响其他密钥的安全性。设计旨在长期使用密钥不能确保起安全性的情况下而不影响过去会话的保密性。

维基百科上有该条目,可以去看看,下面是我的理解。

perfect forward secrecy是在HTTPS基础上进一步保护用户电脑同服务器之间的加密通讯。

其解决的一个安全场景就是,如果服务器同用户间的加密通讯内容被窃听,也被储存下来,这些被加密的内容虽然当时无法被解密,被破解,但是当日后,服务器的SSL密钥被取得后(不管是何种原因被取得密钥),这些过往的内容是可以用这个密钥来解密的。这样虽然时效性可能差些,但是仍然是会有被破解的危险存在。


而采用 完美远期加密 的 SSL 或者 HTTPS 通讯,加密钥匙只是短暂性的,而且不能从服务器的 SSL 密钥中推算出来,这样即使日后 SSL 密钥被第三方取得,过去和未来的 HTTPS 通讯仍然安全,窃听者始终无法破解所窃听的内容(以目前的技术而言)。


目前只有用 ephemeral Diffie-Hellman 的算法才算是 完美远期加密

 

Nginx的设置(里面表明了最低支持的nginx版本)

ssl_protocols TLSv1.3;# Requires nginx >= 1.13.0 else use TLSv1.2
ssl_prefer_server_ciphers on; 
ssl_dhparam /etc/nginx/dhparam.pem; # openssl dhparam -out /etc/nginx/dhparam.pem 4096
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout  10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver $DNS-IP-1 $DNS-IP-2 valid=300s;
resolver_timeout 5s; 
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

其中

ssl_dhparam /etc/nginx/dhparam.pem; # openssl dhparam -out /etc/nginx/dhparam.pem 4096

需要使用openssl命令生成dhparam.pem,使用一下命令即可:

openssl dhparam -out dhparam.pem 2048

个人认为2048位即可满足需要,如果安全等级要求更高可以使用4096,当然服务器负载也会相应增大一点。

开启之后,再用 SSL Labs 的测试工具来测试加密强度,现在已经达到了A+,算是最高的评分了。

Nginx完全正向保密(perfect forward secrecy)设置_第1张图片

在报告中看到的唯一的缺点,在浏览器的支持部分,很多低版本浏览器是不被支持的。另外 Java 6 也是不支持的。这两个都是早已退休的技术,不支持就不支持吧。

你可能感兴趣的:(服务器)