查看ssl版本
1 cmd
openssl s_client -connect domain:443 -tls1 (-tls1_1, -tls1_2)
其中domain 表示nginx 域名配置中使用https的域名(例如:www.baidu.com),以上命令可以查看,目前nginx支持的tls版本。
2 chrome
依次打开: 右键->审查(inspect) ->安全(security)。
然后在当前页面访问配置的域名。然后 安全(security) 下点击要查看的域名,即可在右侧的连接中的协议下,看到 tls 版本号。
升级安装
1 准备工作:
下载新版OpenSSL源码包
https://www.openssl.org/source # openssl 官网,可查询当前最高版本
wget https://www.openssl.org/source/openssl-1.1.1u.tar.gz #下载
2 解压安装
tar zxvf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config shared zlib-dynamic
make
make install
安装完成后,我们可以通过默认的安装路径看一下版本号,如果显示OpenSSL 1.0.1u 22 Sep 2016就对了
/usr/local/ssl/bin/openssl version -a
接下来替换掉旧版,创建软连接
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig #通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
替换掉后,我们就可以直接用
openssl version -a
再看一下版本号,如果显示的是新的版本号,就说明安装和替换都成功了
3.接着要看一下Nginx的编译参数
nginx -V
如果不存在–with-openssl这样的编译参数,就说明Nginx采用的是动态方式编译的SSL,这种情况直接重启Nginx就好了,
否则就是静态方式的,需要重新对Nginx进行编译。
nginx重新编译
1.从官网下载你正在使用的nginx版本源码,解压文件。
2.进入安装目录
./configure #加上你的模块参数
make
3.替换nginx
#首先关闭nginx服务(很重要)
在nginx安装文件目录下面,会生成一个 objs 目录,将 objs/nginx替换
/usr/local/nginx/sbin/nginx(nginx的可执行文件)。
4.更改nginx 配置文件
原来的配置文件中,修改ssl设置,所有配置文件中的 ssl_protocols 都改为(有的会配置多个网站,每个都需要改)
ssl_protocols TLSv1.2 TLSv1.1 TLSv1 ; ###或者只保留 TLSv1.2 。
5.重启nginx服务
/usr/local/nginx/sbin/nginx -t #检查配置
/usr/local/nginx/sbin/nginx -s reload #重启
服务器重启之后,执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错
nginx: [error] invalid PID number "" in "/run/nginx.pid"
解决方法:
nginx -c /usr/local/nginx/nginx.conf #nginx.conf文件的路径可以从nginx -t的返回中找到。
nginx -s reload