本文主要介绍如何使用编译的方式升级openssl库和nginx用于支持HTTP2和TLSv1.3并且介绍了一些简单的提高nginx安全性的配置。
1、编译安装openssl
考虑到Linux系统中有许多组件都需要使用openssl库,而现在默认使用的openssl库绝大多数都没到达能够支持TLS1.3的openssl1.1.1版本以上,因此个人建议不要直接修改系统已有的默认openssl库而是另外使用一个新目录来编译安装新版本的openssl。
具体的支持信息可以查看openssl官网的TLSv1.3部分。
解压下载的稳定版openssl1.1.1g进行编译安装,注意使用--prefix=
指定安装目录
# 下载
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
# 解压
tar -zxvf openssl-1.1.1g.tar.gz
# 配置、编译
./config --prefix=/home/openssl
make
# 检查是否出错
make test
# 安装
make install
安装完成后检查链接库是否正常,将缺少的文件直接软链接到系统的/usr/lib64
目录下
ln -s /home/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /home/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
最后检查系统使用的openssl的版本是否为新版以及系统的库指向是否正确
2、编译安装nginx
2.1 nginx的TLS1.3和HTTP2
想要在nginx中开启TLS1.3的支持,只需要使用支持TLS1.3的openssl库来进行编译即可。
查看nginx的版本更新说明我们可以知道nginx从1.9.5版本开始支持HTTP2:
从1.13版本开始支持TLS1.3
2.2 指定openssl目录进行nginx编译安装
nginx的编译安装此前已经介绍过了,有需要的同学可以点击这里回顾。
wget http://nginx.org/download/nginx-1.18.0.tar.gz
这次我们使用的是截止2020年5月19号
最新的稳定版本nginx1.18.0
,一些注意的事项如下:
--with-http_v2_module
和--with-http_ssl_module
用于支持HTTP2和ssl加密,--with-openssl=
用于指定openssl库的安装目录--with-openssl-opt=enable-tls1_3
用于开启openssl库的tls1.3支持,但是现在的新版本已经默认开启,无需额外添加这个参数
剩下的就和常规的编译安装无异,下面是此次编译的参数:
./configure --prefix=/home/nginx \
--sbin-path=/home/nginx/sbin/nginx \
--with-openssl-opt=enable-tls1_3 \
--with-openssl=/home/openssl \
--conf-path=/home/nginx/nginx.conf \
--error-log-path=/home/nginx/logs/error.log \
--http-log-path