介绍
《为什么我们应该尽快支持 ALPN?》文中提到了OpenSSL 1.0.2 开始支持 ALPN,服务端不支持 ALPN,在 Chrome 51 中无法协商到 HTTP/2。
执行下面的命令来查看openssl版本
openssl version
如果版本1.0.2+的话恭喜你,可以直接用apt-get或者yum安装,否则需要手动编译nginx。
注意:必须使用https链接才能用到http/2,nginx1.9.5才开始支持http/2的。
使用免费证书开启https《在Nginx上https部署 Let's Encrypt 证书》
选择一:apt-get或者yum安装(适合openssl版本1.0.2+)
安装
开启HTTP/2
listen添加http2即可
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
...
}
选择二:手动编译nginx(适合版本openssl版本低于1.0.2)
网上很多文章说利用openssl库编译的文章,但是编译都不通过,原因是OpenSSL 1.0.2都还不支持CHACHA20-POLY1305加密。
不要太鲁莽虚拟机先测试没问题再到线上部署。
cd /usr/local
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.4.1.tar.gz
tar xzf libressl-2.4.1.tar.gz
wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar xzf nginx-1.9.7.tar.gz
cd nginx-1.9.7
需要让nginx同时支持http/2和spdy,所以选择了1.9.7版本(更高的版本不能移除了spdy)。
先安装包:
yum install -y zlib-devel
编译
./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-ipv6 \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-ld-opt=-ljemalloc \
--with-openssl=../libressl-2.4.1 \
--with-ld-opt="-lrt"
make && make install
配置LibreSSL
在.conf文件中添加如下:
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:5m;
ssl_buffer_size 4k;
重启Nginx(service nginx restart)网站就成功部署了CP算法了。
完成服务器的 TLS/SSL 配置之后,还有一个指定动作——测试 SSL 配置。这里通过 ssllabs.com 来对服务器进行测试,测试结果如下:
更多配置正在更新,可以关注博文获取最新动态。