nginx 开启 http2支持

前提条件:网站开启https,服务器软件openssl1.1、nignx 1.11以上最好。

然后nginx ssl配制如下:

参照资料:https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl on;
       ssl_certificate /var/www/ssl/domain.crt;
       ssl_certificate_key /var/www/ssl/domain.key;

       ssl_session_cache shared:SSL:5m;
       add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

       ssl_protocols TLSv1.2 TLSv1.1  TLSv1;
       ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
       ssl_prefer_server_ciphers on;
为了兼容更多浏览器:ssl_ciphers选项使用如下配置:
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384: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

#ECDHE-RSA-AES128-GCM-SHA256 放在最前面,具体参考 https://www.oschina.net/translate/strong_ssl_security_on_nginx

ssl_cliphers优先级逻辑:

首先选择 ECDHE + AESGCM 密码。这些都是 TLS 1.2 密码并没有受到广泛支持。这些密码目前没有已知的攻击目标。

PFS 密码套件是首选,ECDHE 第一,然后 DHE。

AES 128 更胜 AES 256。有讨论是否 AES256 额外的安全是值得的成本,结果远不明显。目前,AES128 是首选的,因为它提供了良好的安全,似乎真的是快,更耐时机攻击。

向后兼容的密码套件,AES 优先 3DES。暴力攻击 AES 在 TLS1.1 及以上,减轻和 TLS1.0 中难以实现。向后不兼容的密码套件,3DES 不存在.

RC4 被完全移除. 3DES 用于向后兼容

其它工具推荐:

安装谷歌插件:HTTP/2 and SPDY indicator
查看哪些网站支持了http2。

google、facebook、youtube 、twitter 已经全部切换到了http2。

 安装后测试下http2安装效果及浏览器兼容:

https://www.ssllabs.com/ssltest/

保证网站得分A或者A+,

测试中发现如下问题:

 Session resumption (caching)No (IDs assigned but not accepted)

解决办法:在sites-available/default  里面增加一行

ssl_session_cache shared:ssl_session_cache:10m;