SNI指是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用。它允许客户端在发起SSL握手请求时(具体说来,是客户端发出SSL请求中的ClientHello阶段),就提交请求的Host信息,使得服务器能够切换到正确的域并返回相应的证书。
上面这句哪都有,没什么含金量。下面是我的理解。
SSL网站用的证书,提交到web服务器时,原本设计的是按服务器IP+端口来提交的。这样就造成了同一服务器IP的443端口,只能用一个证书。这样设计比同一IP和端口的,多主机头设计差太多。于是提出SNI标准,以后新的SSL和服务器,允许用主机头 + 端口方式提交到同一服务器上,这样就灵活多了。
那如何启用IIS8的SNI呢?
修改 applicationhost.config。(未研究实验)
修改注册表(这个方便)
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslSniBindingInfo
默认值为空,修改为2.即可。
参数含义如下:
-
IP:Port – Legacy SSL binding.(默认,传统的IP+端口)
-
Hostname:Port – SSL binding using SNI. (new in IIS 8)
-
Central Certificate Store – SSL binding using Central Certificate Store. I will discuss this in detail in my next blog. (new in IIS 8)
进入powershell检查你的SSL情况。
PS C:\Users\Administrator> netsh http show sslcert
SSL Certificate bindings:
-------------------------
Hostname:port : A.domain.cn:443
Certificate Hash : e1f2ea49eb4b3a0368504861db1b598cb08f49cf
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : WebHosting
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
Hostname:port : b.domain.cn:443
Certificate Hash : 21a33747c5e245f5e2322531131766c77907c57d
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : WebHosting
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
-------------------------------------------------------------
看到了两个域名对应同一个端口了吗?恭喜。
从此IIS不必再非得绕弯Nginx之类的才能支持SNI了。赞。
参考官方文档:https://docs.microsoft.com/zh-cn/iis/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability
原版英文资料:https://blogs.msdn.microsoft.com/kaushal/2012/09/04/server-name-indication-sni-with-iis-8-windows-server-2012/