配置Nginx支持SSL SNI(一個IP綁定多個證書) 以及Haproxy實現多域名證書


概述

傳統的每個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,依次訪問上面的訪問會發現,相關的證書與之配對。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM