Daily Archives: 2015年12月8日

Nginx服务器一个IP地址配置多个SSL证书

060

根据传统HTTPS的工作原理,浏览器在访问一个HTTPS站点时,先与服务器建立SSL连接,建立连接的第一步就是请求服务器的证书。而服务器在发送证书的时候,是不知道浏览器访问的是哪个域名的,所以不能根据不同域名发送不同的证书

SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。一句话简述它的工作原理就是,在连接到服务器建立SSL连接之前先发送要访问站点的域名(Hostname),这样服务器根据这个域名返回一个合适的证书。目前,大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL 1.0.0已经内置这一功能,nginx1.0以上版本已经支持SNI,只需要在编译安装前安装最新的OpenSSL 1.0.0以上版本Nginx使用1.0以上版本!。在目前iPv4枯竭的时代一个IP是非常宝贵的且价格非常高,这个时候如果为了配置一个SSL证书而购买一个IP是非常不划算的。

以CentOS为例:
你可以使用以下命令查看Nginx是否开启SNI

/usr/local/nginx/sbin/nginx -V

(根据你的Nginx安装目录而定)
nginx: nginx version: nginx/1.1.0
nginx: TLS SNI support disable
如果提示:nginx: TLS SNI support enable(已开启)
如果已开启那么可直接使用和不使用SNI配置完全一样。
如果没有开启提示:如果提示:nginx: TLS SNI support disable(未开启)
那们我们需要重新编译安装Nginx

首先下载Nginx安装包

wget http://nginx.org/download/nginx-1.9.0.tar.gz

解压Nginx安装包

tar zxvf  nginx-1.9.0.tar.gz

进入解压文件夹

cd nginx-1.9.0

下载OpenSSL最新版本

wget http://www.openssl.org/source/openssl-1.0.1o.tar.gz

解压OpenSSL源码包

tar zxvf  openssl-1.0.1o.tar.gz

更新系统的OpenSSL组件(CentOS)

yum install -y openssl*
yum install -y openssl-devel

等待完成……..

执行以下命令编译Nginx
指定编译规则:

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-openssl=./openssl-1.0.1o/

开启编译

make

等待完成(一般数分钟 视服务器而定)
备份旧文件

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

复制新文件到安装目录

cp objs/nginx /usr/local/nginx/sbin/nginx

测试Nginx配置是否正确

/usr/local/nginx/sbin/nginx -t

会得到以下提示:
the configuration file/usr/local/nginx/conf/nginx.conf syntax is ok
configuration file/usr/local/nginx/conf/nginx.conf test is successful
证明配置没有问题,如果有问题按错误提示修改!
编译更新

make upgrade

使新配置生效

/usr/local/nginx/sbin/nginx -s reload

再次使用查看Nginx开启的服务

/usr/local/nginx/sbin/nginx -V

(根据你的Nginx安装目录而定)
nginx: nginx version: nginx/1.1.0 nginx: TLS SNI support enable(已开启)

大功告成!接下来就是修改vhost的配置,加上SSL证书配置了。

via: https://qiaodahai.com/nginx-server-an-ip-address-to-configure-multiple-ssl-certificates.html