SNI信息解决HTTPS一个IP对应多个SSL证书

  • A+
所属分类:网站SSL证书
阿里云优惠券免费领取

什么是SNI信息?SNI信息有什么作用?SNI信息可以解决HTTPS协议中,单个IP对应多个SSL证书(多个域名共享一个IP)的解决方法:

什么是SNI?

SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。

SNI信息:SNI(Server Name Indication)主要用来解决一台服务器只能使用一个证书(一个域名)的缺点,随着服务器对虚拟主机的支持,一个服务器上可以为多个域名提供服务,当服务器使用单一IP提供多个域名的HTTPS服务时,客户端在发起的请求中会携带SNI信息,指明所请求的域名,使得服务器能够切换到正确的域名并返回相应的证书。

SNI产生的背景:

随着虚拟主机的兴起,服务器开启对虚拟主机的支持后,一个服务器IP要对应多个网站域名。当设置了SSL加密,服务器在读取HTTP请求里面的域名之前已经向客户端提交了证书,这会导致使用了错误的数字证书,因为服务器端无法知道客户端到底请求的是哪个域名下的服务,从而导致浏览器对用户发出警告。一个服务器可能为上千个域名提供服务,不可能将所有证书都发送给客户端,让客户端一一验证,找到与请求域名对应的证书。SNI的设计目的是为了让服务器根据请求来决定为哪个域服务,这个信息通常从HTTP请求头获得。

SNI工作原理

SSL握手信息中并没有携带客户端要访问的目标地址,这会导致一个问题,即如果一台服务器有多个虚拟主机,且每个主机的域名不一样,使用了不一样的证书,该返回哪一个给客户端?

SNI工作原理:在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),这样服务器根据这个域名返回一个合适的证书。

Client Hello包中SNI信息携带

在Client Hello中补上Host信息,SNI在TLSv1.2开始得到协议的支持,当然还需要服务端和客户端都支持。

Client Hello抓包如下:

这个扩展信息就指定了该SSL握手信息的目标域名为nex.163.com,所以有了SNI扩展信息,单个IP对应多个域名的服务器就知道如何反馈证书了。

阿里云高性能云服务器优惠
新手站长

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: