网上有很多文章介绍在某些情况下通配证书的必要性,但是如何在IIS中配置通配证书却少有人提及,因为对于通配证书的需求普遍存在,我们在这篇文章中来介绍一下如何在IIS中配置通配证书来避免证书匹配错误。

背景

假设有这样一个场景,我们有多个站点(例如site1.marei.com,site2.marei.com和site3.marei.com)绑定到同一个IP:PORT,并区分不同的主机头。我们为每一个SSL站点申请并安装了证书。在浏览网站时,用户仍看到证书不匹配的错误。

问题原因

当一个https的请求到达IIS服务器时,https请求为加密状态,需要拿到相应的服务器证书解密请求。由于每个站点对应的证书不同,服务器需要通过请求中不同的主机头来判断需要用哪个证书解密,然而主机头作为请求的一部分也被加密。最终IIS只好使用第一个绑定到该IP:PORT的站点证书解密请求,从而有可能造成对于其他站点的请求失败而报错。

解决方案

对于该问题有多种解决方案
1. 第一种解决方案将每个https站点绑定到不同的端口。但是这样的话客户端浏览网页时必须手动指定端口,例如https://site.domain.com:444
2. 第二种解决方案是为每个站点分配一个独立的ip,这样冲突就解决了,甚至主机头也不用添加了。
3. 第三种解决方案是使用通配证书。我们采用通配证书颁发给*.domain.com,对于我们的示例中,应该采用颁发给*.marei.com的证书,这样任何访问该domain的请求均可以通过该证书解密,证书匹配错误也就不复存在了。
4. 第四种解决方案是升级为IIS8,IIS8中添加的对于SNI(Server Name Indication)的支持,服务器可以通请求中提取出相应的主机头从而找到相应的证书。
http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability

如何在IIS7中配置通配证书

1. 将证书安装到IIS7服务器
2. 在IIS管理器中,设置443绑定,site1.marei.com在下面的示例中的主机名。

3. 通过管理员打开命令提示符具,转到%SYSTEMDRIVE%\WINDOWS\system32\inetsrv目录
执行以下命令来添加对于其他站点的绑定

appcmd set site /site.name:"<IIS站点名称>" /+bindings.[protocol='https',bindingInformation='<IP>:443:<主机头>']

4. 在IIS中,可以查看绑定,但注意不能做任何改动,否则绑定设置将被重置。任何更改都需要通过APPCMD


5. 测试创建的https://网站,可以看到网站可以成功访问,证书错误不再出现。

 


希望以上步骤对你有所帮助。


Matthew Reid

posted on 2013-03-20 09:56  微软互联网开发支持  阅读(3367)  评论(3编辑  收藏  举报