• Nginx支持SNI证书,已经ssl_server_name的使用


    整理了一些网上的资料,这里记录一下,供大家参考

    什么是SNI?

        传统的应用场景中,一台服务器对应一个IP地址,一个域名,使用一张包含了域名信息的证书。随着云计算技术的普及,在云中的虚拟机有了一个IP,对应多个域名,使用多张证书的应用场景,SNI技术应运而生。SNI(Server Name Indication),即实现了一个服务器使用多个域名证书的TLS扩展,支持用户配置多个域名证书。

    SNI请求特点

        HTTP请求的Host字段在请求的Header中。发起HTTPS请求时,在TLS握手阶段,还无法进行HTTP数据的解析,此时TLS协议的Client Hello字段新增了一个Server Name字段,请求的客户端可以通过这个字段填充请求的Host信息,而服务端在TLS握手阶段就可以选择请求处理的证书,实现SNI的功能。

     各种工具对SNI的支持各种工具对SNI的支持icon-default.png?t=N7T8https://en.wikipedia.org/wiki/Server_Name_Indication

    (1)主流的浏览器  可以理解为客户端工具

    (2)curl和wget之类的命令行工具  可以理解为客户端工具

    curl和nginx关于SNI一些细节

     已知的问题:curl和jdk'版本过低(客户端不支持SNI)','导致'ssl握手的'SNI'问题

     (3)库和编程语言 可以理解为客户端工具

     (4)web服务器 可以理解为服务端

    • 默认SNI是'开启的'

    Nginx支持的配置

        Nginx支持SNI,允许在同一个TLS服务端口下,配置不同的域名,用户通过请求不同的证书域名,可返回相应的upstream响应结果。

        本示例配置了一个证书域名为“lwl.test.com”的单向认证代理服务,一个证书域名为“lwl.default.com”的双向认证代理服务,使用相同的443端口,具体配置如下:

    # Settings for a TLS enabled server.
        upstream lwl.test.com {
            server 192.168.58.196;
        }

        upstream default {
            server 192.168.58.195;
        }

      server {
            listen       443 ssl;
            listen       [::]:443 ssl;
            server_name  lwl.test.com;
            root         /usr/share/nginx/html;

            ssl_certificate /etc/nginx/ssl_sni/server/lwl.test.com/server.crt;
            ssl_certificate_key /etc/nginx/ssl_sni/server/lwl.test.com/server.key;

            ssl_session_cache shared:SSL:1m;
            ssl_session_timeo

  • 相关阅读:
    Ajax了解及请求方式
    Android实现富文本展示
    osWorkflow-1——osWorkflow官方例子部署启动运行(版本:OSWorkflow-2.8.0)
    计算机毕设(附源码)JAVA-SSM家乡旅游宣传书册
    Linux:多线程中的互斥与同步
    数仓的字符截取三胞胎:substrb、substr、substring
    C++中->与.的区别
    unity中的SendMessage详解
    金字塔的思维--思维的格式化与体系化
    JavaSE - 递归求解汉诺塔问题
  • 原文地址:https://blog.csdn.net/yangyangye/article/details/133645667