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

2018年9月17日09:30:40网站SSL证书SNI信息解决HTTPS一个IP对应多个SSL证书已关闭评论2,790 views3

什么是SNI信息?SNI信息有什么作用?SNI信息可以解决HTTPS协议中,单个IP对应多个SSL证书(多个域名共享一个IP)的解决方法:文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html

什么是SNI?

SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html

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

SNI产生的背景:

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

SNI工作原理

SSL握手信息中并没有携带客户端要访问的目标地址,这会导致一个问题,即如果一台服务器有多个虚拟主机,且每个主机的域名不一样,使用了不一样的证书,该返回哪一个给客户端?文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html

SNI工作原理:在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),这样服务器根据这个域名返回一个合适的证书。文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html

Client Hello包中SNI信息携带

在Client Hello中补上Host信息,SNI在TLSv1.2开始得到协议的支持,当然还需要服务端和客户端都支持。文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html

Client Hello抓包如下:文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html

Extension: server_name
    Type: server_name (0x0000)
    Length: 16
    Server Name Indication extension
        Server Name list length: 14
        Server Name Type: host_name (0)
        Server Name length: 11
        Server Name: nex.163.com

这个扩展信息就指定了该SSL握手信息的目标域名为nex.163.com,所以有了SNI扩展信息,单个IP对应多个域名的服务器就知道如何反馈证书了。文章源自新手站长网-https://www.xinshouzhanzhang.com/sni-https-ssl.html