昨天凌晨将公司旗下的另外一个域名也升级成通过ssl证书登录的形式,那里料到过程竟然非常曲折,原因是nginx如果编译的时候使用openssl如果没有添加enable-tl***t参数的话,就只支持一个ssl证书,因此要让nginx支持多域名证书就必须要重新编译openssl和nginx。
详细过程:
升级更改完nginx配置文件以后,使用/usr/local/nginx/sbin/nginx -t测试配置文件没有问题,就采用/usr/local/nginx/sbin/nginx -s reload重新加载配置文件,输入新域名的https访问竟然出现错误证书的提示,左键点击证书错误,选择查看证书,发现用的是另外一个域名的证书。反复检查后错误依旧。心中转念一想:是不是nginx只支持一个证书?带着这个问题,在baidu和google上搜索了一下,还真的是这个问题,要让nginx支持多证书,nginx必须支持TLS SNI,使用命令/usr/local/nginx/sbin/nginx -V查看,服务器的查看结果如下:
nginx version: nginx/1.0.12
TLS SNI support disabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
很明显,不支持TLS SNI,需要重新编译openssl和nginx。
接下来我们详细叙述一下能让nginx支持多域名证书的过程,主要分为如下两个大步骤:编译安装openssl和编译安装nginx(nginx平滑升级,不影响业务)。
一、编译安装openssl
wget http://www.openssl.org/source/openssl-0.9.8l.tar.gz
tar zxvf ./openssl-0.9.8l.tar.gz
cd ./openssl-0.9.8l
#编译的时候需要加上enable-tl***t参数
./config enable-tl***t
make
make install
二、编译安装nginx(nginx平滑升级)
tar xzvf nginx-1.0.12.tar.gz
cd nginx-1.0.12
#备份原来的nginx配置
mv /usr/local/nginx /usr/local/nginx_old
#安装nginx
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-openssl=../openssl-0.9.8l/
make;make install
cd /usr/local/nginx
#备份新安装的配置目录
mv conf conf_bak
mv logs logs_bak
#拷贝原来的配置文件目录
cp -ar /usr/local/nginx_old/conf .
cp -ar /usr/local/nginx_old/logs .
#测试配置文件
/usr/local/nginx/sbin/nginx -t
#查找nginx主进程
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
#执行切换操作
kill -USR2 912
kill -WINCH 912
kill -QUIT 912
安装完成使用/usr/local/nginx/sbin/nginx -V查看一下是否支持TLS SNI,检测如下:
nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-openssl=../openssl-0.9.8l/
Ok,显示已经支持了TLS SNI,在输入https访问,终于能显示正确的证书了! 注意目前如果使用xp上的IE去访问的话还是会提示证书有问题,因为xp上任何版本的IE都不支持TLS SNI。
首先执行如下命令生成一个key
openssl genrsa -des3 -out ssl.key 1024
然后他会要求你输入这个key文件的密码。不推荐输入。因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的。
由于生成时候必须输入密码。你可以输入后 再删掉。
mv ssl.key xxx.key
openssl rsa -in xxx.key -out ssl.key
rm xxx.key
然后根据这个key文件生成证书请求文件
openssl req -new -key ssl.key -out ssl.csr
以上命令生成时候要填很多东西 一个个看着写吧(可以随便,毕竟这是自己生成的证书)
最后根据这2个文件生成crt证书文件
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
这里365是证书有效期 推荐3650哈哈。这个大家随意。最后使用到的文件是key和crt文件。
如果需要用pfx 可以用以下命令生成
openssl pkcs12 -export -inkey ssl.key -in ssl.crt -out ssl.pfx
在需要使用证书的nginx配置文件的server节点里加入以下配置就可以了。
ssl on;
ssl_certificate /home/ssl.crt;
ssl_certificate_key /home/ssl.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
然后重启nginx就大功告成了
相关推荐
nginx配置,SSL证书配置文件,通过数字证书管理服务购买并签发SSL证书后,将已签发的证书下载到本地,并根据需要将证书安装到要使用证书的环境,配置之后就可以https访问,
基于openssl 自行签发https 协议证书 openssl+nginx实现https自签有效加密实战记录
当待验证的客户端证书是由intermediate-CA签发,而非有root-CA签发时,需要在proxy_ssl_trusted_certificate中配置intermediate-CA和root-CA组成的证书链文件 也就是说,直接尝试使用中级 CA 来验证客户端是无法通过...
本篇不讲什么是https,什么是SSL,什么是nginx 想了解这些的请绕道,相信有很多优秀的文章会告诉你。 本篇要讲的在最短的时间内,让你的网站从http升级到https。 开始教程前再说一句:https你值得拥有。 (此图片来源...
方便快捷易用的Nginx可视化UI网页管理部署配置工具系统,使用Web网页系统来快速配置部署,支持在线配置你的Nginx/Openresty的反向代理、负载均衡、SSL/HTTPS证书免费签发,自动续签、TCP/UDP 3-4层转发、可以自定义...
方便快捷易用的Nginx可视化UI网页管理部署配置工具系统,使用Web网页系统来快速配置部署,支持在线配置你的Nginx/Openresty的反向代理、负载均衡、SSL/HTTPS证书免费签发,自动续签、TCP/UDP 3-4层转发、可以自定义...
方便快捷易用的Nginx可视化UI网页管理部署配置工具系统,使用Web网页系统来快速配置部署,支持在线配置你的Nginx/Openresty的反向代理、负载均衡、SSL/HTTPS证书免费签发,自动续签、TCP/UDP 3-4层转发、可以自定义...
https单向验证应用广泛想必大家...2、客户浏览器检查服务器送过来的证书是否是由自己信赖的CA中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的询问客
方便快捷易用的Nginx可视化UI网页管理部署配置工具系统,使用Web网页系统来快速配置部署,支持在线配置你的Nginx/Openresty的反向代理、负载均衡、SSL/HTTPS证书免费签发,自动续签、TCP/UDP 3-4层转发、可以自定义...