技术文档

服务器多站点多域名HTTPS实现 – HTTPS SSL 教程

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

1. IIS中实现

  • 问题原因

服务器多站点多域名HTTPS实现 – HTTPS SSL 教程

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

  • 解决方案

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

2. Nginx中实现

打开 Nginx 安装目录下 conf 目录中打开 nginx.conf 文件,找到

server{ listen443; server_namedomain1; sslon; ssl_certificate证书域名.pem; ssl_certificate_key证书域名.key; ssl_session_timeout5m; ssl_protocolsTLSv1TLSv1.1TLSv1.2; ssl_ciphersAESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_cipherson; location/{roothtml; indexindex.htmlindex.htm;}}

在上述基础上,再添加另一段配置

server{listen443; server_namedommain2; sslon; ssl_certificate证书域名.pem; ssl_certificate_key证书域名.key; ssl_session_timeout5m; ssl_protocolsTLSv1TLSv1.1TLSv1.2; ssl_ciphersAESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_cipherson; location/{roothtml; indexindex.htmlindex.htm;}}

通过上述配置在Nginx中支持多个证书

 

GDCA致力于网络信息安全,已通过WebTrust 的国际认证,是全球可信任的证书签发机构。GDCA专业技术团队将根据用户具体情况为其提供最优的产品选择建议,并针对不同的应用或服务器要求提供专业对应的HTTPS解决方案。

GDCA一直以“构建网络信任体系,服务现代数字生活”的宗旨,致力于提供全球化的数字证书认证服务。其自主品牌——信鉴易 SSL证书:包括 OVSSL、EVSSL、代码签名证书等。为涉足互联网的企业打造更安全的生态环境,建立更具公信力的企业网站形象。

©2020-2024   万云SSL证书  (www.sslssl.com.cn)  万云科技   豫ICP备2020034358号-10