博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配置Nginx支持SSL SNI(一个IP绑定多个证书) 以及Haproxy实现多域名证书
阅读量:5286 次
发布时间:2019-06-14

本文共 2468 字,大约阅读时间需要 8 分钟。

概述

传统的每个SSL证书签发,每个证书都需要独立ip,假如你编译openssl和nginx时候开启TLS SNI (Server Name Identification) 支持,这样你可以安装多个SSL,绑定不同的域名,可以共享同一个ip。

近期由于遇到申请通配符版证书时,比如*.bb.com这样的二级域名时,主域名为二级域名时,主域名和其子通配符下的域名可以用同一张证书,但是像*.aa.bb.com这样的证书不包含其三级主域名,只有二级的域名支持。此时便会遇到这种一个IP绑定多个证书的情况。

1、编译openssl支持TLS SNI   注意:最新版的openssl可能不支持enable-tlsext

cd /usr/src/

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
./config enable-tlsext
make
make install

2、编译nginx支持TLS SNI,首先验证本地的nginx是TLS SNI是否支持:

/usr/local/nginx/sbin/nginx -V nginx: nginx version: nginx/1.1.0 nginx: TLS SNI support disable

cd /usr/src/

wget http://nginx.org/download/nginx-0.7.67.tar.gz
tar zxvf nginx-0.7.67.tar.gz
cd nginx-0.7.67

 

./configure \

--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid  \
--lock-path=/var/lock/nginx.lock \
--user=nobody\
--group=nobody\
--with-http_stub_status_module\
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client_temp/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy_temp/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi_temp/  \
--with-openssl=../openssl-0.9.8l/
make

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

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

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

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

如果成功的话此时会看到: TLS SNI support enabled

 

这样就可以在 同一个IP上配置多个HTTPS主机了。

实例如下:

server  {        listen 443;        server_name   *.www.aabb.com;        index index.html index.htm index.php;        root  /data/wwwroot/www.aabb.com/webroot;        ssl on;        ssl_certificate "/usr/local/nginx/conf/ssl/_.www.aabb.com.public.cer";        ssl_certificate_key "/usr/local/nginx/conf/ssl/_.www.aabb.com.private.key";    ......}  server  {        listen 443;        server_name   www.aabb.com;        index index.html index.htm index.php;        root  /data/wwwroot/www.aabb.com/webroot;        ssl on;        ssl_certificate "/usr/local/nginx/conf/ssl/www.aabb.com.public.cer";        ssl_certificate_key "/usr/local/nginx/conf/ssl/www.aabb.com.private.key";    ......}

 这样访问每个虚拟主机都正常。

 ------------------------------------------------------------------------------------

使用Haproxy来实现

配置Haproxy的配置文件:

按照以上配置就可以实现多证书的HTTPS,依次访问上面的访问会发现,相关的证书与之配对。

 

转载于:https://www.cnblogs.com/wjoyxt/p/6134128.html

你可能感兴趣的文章
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
根据xml生成相应的对象类
查看>>
Android StageFrightMediaScanner源码解析
查看>>