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,依次访问上面的访问会发现,相关的证书与之配对。

  • 相关阅读:
    Oracle里的执行计划
    Java线程锁总结
    Java面试总结-链接
    oracle 排序函数(转载)
    微软今天的Windows 10硬件发布会汇总:手机瞬间变PC
    DevOps 在公司项目中的实践落地
    阿里云云计算工程师ACP学习笔记--知识点总结
    中小型互联网公司微服务实践-经验和教训
    Prometheus监控的最佳实践——关于监控的3项关键指标
    深度学习的Attention模型
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/6134128.html
Copyright © 2011-2022 走看看