1. 介绍

    早期的SSLv2根据经典的公钥基础设施PKI(Public Key Infrastructure)设计,默认一台服务器(或者说一个IP)只会提供一个服务,所以在SSL握手时,服务器端可以确信客户端申请的是哪张证书。但是让人万万没有想到的是,虚拟主机大力发展起来了,这就造成了一个IP会对应多个域名的情况。解决办法有一些,例如申请泛域名证书,对所有*.yourdomain.com的域名都可以认证,但如果你还有一个yourdomain.net的域名,那就不行了。在HTTP协议中,请求的域名作为主机头(Host)放在HTTP Header中,所以服务器端知道应该把请求引向哪个域名,但是早期的SSL做不到这一点,因为在SSL握手的过程中,根本不会有Host的信息,所以服务器端通常返回的是配置中的第一个可用证书。因而一些较老的环境,可能会产生多域名分别配好了证书,但返回的始终是同一个。既然问题的原因是在SSL握手时缺少主机头信息,那么补上就是了。SNI(Server Name Indication)定义在RFC 4366,是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用。它允许客户端在发起SSL握手请求时(具体说来,是客户端发出SSL请求中的ClientHello阶段),就提交请求的Host信息,使得服务器能够切换到正确的域并返回相应的证书。要使用SNI,需要客户端和服务器端同时满足条件,幸好对于现代浏览器来说,大部分都支持SSLv3/TLSv1,所以都可以享受SNI带来的便利。

2. 示例

     公司域名更变,同时又要新旧域名同时运行。 那么对于https的域名在同一个IP上如何同时存在多个虚拟主机呢?查看了下nginx手册,有这么一段内容,如下:如果在同一个IP上配置多个HTTPS主机,会出现一个很普遍的问题:
server {listen          443;server_name     www.example.com;ssl             on;ssl_certificate www.example.com.crt;...
}server {listen          443;server_name     www.example.org;ssl             on;ssl_certificate www.example.org.crt;...
}

最古老的也是最稳定的解决方法就是每个HTTPS主机使用不同的IP地址:使用上面的配置,不论浏览器请求哪个主机,都只会收到默认主机www.example.com的证书。这是由SSL协议本身的行为引起的——先建立SSL连接,再发送HTTP请求,所以nginx建立SSL连接时不知道所请求主机的名字,因此,它只会返回默认主机的证书。

server {listen          192.168.1.1:443;server_name     www.example.com;ssl             on;ssl_certificate www.example.com.crt;...
}server {listen          192.168.1.2:443;server_name     www.example.org;ssl             on;ssl_certificate www.example.org.crt;...
}
 那么,在同一个IP上,如何配置多个HTTPS主机呢?nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名)。不过,SNI扩展还必须有客户端的支持,另外本地的OpenSSL必须支持它。如果启用了SSL支持,nginx便会自动识别OpenSSL并启用SNI。是否启用SNI支持,是在编译时由当时的 ssl.h 决定的(SSL_CTRL_SET_TLSEXT_HOSTNAME),如果编译时使用的OpenSSL库支持SNI,则目标系统的OpenSSL库只要支持它就可以正常使用SNI了。nginx在默认情况下是TLS SNI support disabled,需要重新编译nginx并启用TLS。启用方法步骤如下:
# wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
# tar zxvf openssl-1.0.1e.tar.gz
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module \
--with-openssl=./openssl-1.0.1e \
--with-openssl-opt="enable-tlsext"
# make
# make install
    查看是否启用:
# /usr/local/nginx/sbin/nginx -V
TLS SNI support enabled
    这样就可以在 同一个IP上配置多个HTTPS主机了。实例如下:
server  {listen 443;server_name   www.ttlsa.com;index index.html index.htm index.php;root  /data/wwwroot/www.ttlsa.com/webroot;ssl on;ssl_certificate "/usr/local/nginx/conf/ssl/www.ttlsa.com.public.cer";ssl_certificate_key "/usr/local/nginx/conf/ssl/www.ttlsa.com.private.key";  ......
}server  {listen 443;server_name   www.heytool.com;index index.html index.htm index.php;root  /data/wwwroot/www.heytool.com/webroot;ssl on;ssl_certificate "/usr/local/nginx/conf/ssl/www.heytool.com.public.cer";ssl_certificate_key "/usr/local/nginx/conf/ssl/www.heytool.com.private.key";  ......
}
    这样访问每个虚拟主机都正常。

参考链接:https://blog.csdn.net/firefile/article/details/80532161?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://blog.cloudflare.com/encrypted-sni/
https://www.cnblogs.com/ycwu314/p/11335332.html

HTTPS之SNI介绍相关推荐

  1. fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Fiddler的HTTPS抓包功能." 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启, ...

  2. HTTPS安全证书介绍

    IIS配置web SSL 安全证书Https访问 From : http://cao416451347ming.blog.163.com/blog/static/1154556162010217441 ...

  3. HTTPS原理全面介绍【备查】

    来源:https://www.cnblogs.com/haimishasha/p/11373034.html 目录 应用层协议:HTTPS 1. HTTPS定义 2. 密码学基础 3. HTTP通信问 ...

  4. grpc、https、oauth2等认证专栏实战7:使用cfssl来制作证书介绍

    已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go.protobuf.multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与 ...

  5. 聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例

    活动预告:12月22~23,GIAC全球互联网架构大会将于上海举行,本周新增阿里,京东.LinkedIn等多名讲师出席,参看文末了解更多详情. 导读:移动互联网时代,APP 厂商之间的竞争非常激烈,而 ...

  6. nginx(十)SNI理解

    一   背景探究驱动 1) curl校验'证书'有效期方式'有误',导致变更'回退' -->"实际证书替换成功"2)客户端'不支持'SNI["实际版本过低" ...

  7. 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半...

    本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...

  8. 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半

    本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...

  9. https ddos攻击——由于有了认证和加解密 后果更严重 看绿盟的产品目前对于https的ddos cc攻击需要基于内容做检测...

    如果web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通信时,web服务器需要消耗更多的资源用来进行认证和加解密,另一方面,一部分的防护设备无法对 ...

  10. nginx http请求强转https 无www强转www服务 过百度https认证

    文章目录 1 介绍 2 nginx.conf 配置 2.1 http 转https 2.2 https无www强转www 3 过百度https认证 1 介绍 为了让网站个安全,我们通常会安装https ...

最新文章

  1. 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)
  2. linux下查看和添加PATH环境变量
  3. 猿辅导、作业帮忙“圈钱”,跟谁学、有道、51Talk狂“烧钱”,在线教育钱途在哪?
  4. 数据库修改,删除的操作必须有保险操作。
  5. java整数四则运算课设_用面向对象方法设计实现整数的四则运算(java)
  6. WOJ 18 动态无向图
  7. wacom mac驱动_MAC系统装Wacom手绘板的方法及注意事项
  8. 开源优势_企业开源的10大优势
  9. Bailian3717 移动路线【组合】
  10. 基于单片机GSM的防火防盗系统的设计
  11. elk logstach收集交换机日志
  12. linux的定时器的使用,linux定时器如何使用方法
  13. 提取Wallpaper engineer里面scene.pkg文件的内容
  14. QImage缩放后图片更清晰处理
  15. Mplayer SMplayer 软件配置
  16. 为师弟师妹们连载(二)
  17. 庆山《得未曾有》摘录
  18. Element-UI安装与使用
  19. GPU服务器中安装CUDA
  20. Chrome(谷歌浏览器) 程序开发32个经常使用插件

热门文章

  1. 搜狗推微信公众平台搜索 可搜公众号与文章
  2. linux运维工程师问题,2、Linux运维工程师之解决问题思路
  3. 全新小说安装教程小程序源码
  4. 千锋培训学python怎么样
  5. hahMap的括号中指定了数字表示是什么意思
  6. DSP TMS320F2803x 增强型捕获模块(eCAP)
  7. 【小峰の题单】网络流经典题目
  8. 捋一捋DDR内存相关的各种频率
  9. php实现按一下button显示的数字加1_24h只能加一次,javascript - 连续点击按钮后,数据如何不会累加显示?...
  10. Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI20)