IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    通过开启 Nginx TLS SNI 来支持同一 IP 下多 SSL 证书

    BelinChung发表于 2015-03-30 07:01:32
    love 0

    前几天说给博客部署 SSL 证书来提高逼格,后来因为自己一个项目的需要,也跟着申请了多了一张 SSL 证书,按照相同的流程部署上去后,发现前面的域名的证书都 load 到了新增加的那张证书。接着 Google 了下,原来是 Nginx 编译的时候没有开启 TLS SNI ,这样就导致了同一 IP 下只能支持一张证书。

    查看已安装的 Nginx 是否开启 TLS SNI

    1
    2
    3
    4
    5
    $ nginx -V
    ginx version: nginx/1.6.2
    built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55)
    TLS SNI support disabled
    configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

    TLS SNI support disabled 即未开启

    下载支持 SNI 的 OpenSSL

    重新编译 Nginx 需要 OpenSSL,下载并解压到某个目录

    1
    2
    3
    $ cd ~
    $ wget http://www.openssl.org/source/openssl-1.0.2a.tar.gz
    $ tar zxvf openssl-1.0.2a.tar.gz

    重新编译 Nginx

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cd nginx-1.6.2 #这里假设你已经下载比解压了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-openssl=path/to/openssl-1.0.2a
    $ make
    $ mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #备份旧的nginx
    $ cp objs/nginx /usr/local/nginx/sbin/nginx #替换编译好的nginx

    make 的编译选项加上 --with-openssl=path/to/openssl-1.0.2a 参数指向的是你解压的 OpenSSL 目录,make 编译完成后不要执行 make install ,直接将 objs 目录下编译好的新 nginx 执行文件 copy 到原来的路径下替换即可。

    确认已经开启 TLS SNI

    1
    2
    3
    4
    5
    $ nginx -V
    ginx version: nginx/1.6.2
    built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55)
    TLS SNI support enabled
    configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_modul --with-openssl=../../openssl-1.0.2a

    虽然是很简单的一件事,其实我折腾了好久,我一直以为是我 conf 文件哪里写错了,后来误打误撞发现原来是跟没有开启某些相关,希望能帮助大家少走不必要的路。



沪ICP备19023445号-2号
友情链接