zoukankan      html  css  js  c++  java
  • 配置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,依次访问上面的访问会发现,相关的证书与之配对。

  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/6134128.html
Copyright © 2011-2022 走看看