假设有这样一个场景我们有多個站点(例如,和)绑定到同一个IP:PORT并区分不同的主机头。我们为每一个SSL站点申请并安装了证书在浏览网站时,用户仍看到证书不匹配的错误
当一个https的请求到达IIS服务器时,https请求为加密状态需要拿到相应的服务器证书解密请求。由于每个站点对应的证书不同服务器需要通过请求中不同的主机头来判断需要用哪个证书解密,然而主机头作为请求的一部分也被加密最终IIS只好使用第一个绑定到该IP:PORT的站點证书解密请求,从而有可能造成对于其他站点的请求失败而报错
- 方法一:将每个https站点绑定到不同的端口。此时客户端浏览网页时必須手动指定端口,例如:444
- 方法二:为每个站点分配一个独立的IP。此时不再存在请求冲突的情况,且请求中也可不再添加主机头信息
- 方法三:使用通配证书。我们采用通配证书颁发给.的证书这样任何访问该domain的请求均可以通过该证书解密,证书匹配错误也就不复存在了
- 方法四:升级为IIS8,IIS8中添加的对于SNI(Server Name Indication)的支持服务器可以从请求中提取出相应的主机头从而找到相应的证书。
SNI开启方式的详细内容请参見
通过以下操作配置在Nginx中支持多个证书。
- 打开Nginx安装目录中的conf目录找到并打开