同一服务器(VPS)IP下多站点多域名HTTPS实现

假设有这样一个场景,我们有多个站点(例如site1.yixao.net,site2.yixao.net和site3.yixao.net)绑定到同一个IP:PORT,并区分不同的主机头。我们为每一个SSL站点申请并安装了SSL数字证书。在浏览网站时,用户仍看到证书不匹配的错误。那么如何实现同一服务器IP下多站点多域名的https呢?

同一服务器(VPS)IP下多站点多域名HTTPS实现

 

1. IIS中实现

• 问题原因

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

• 解决方案

  • i. 第一种解决方案将每个https站点绑定到不同的端口。但是这样的话客户端浏览网页时必须手动指定端口,例如 https://site.domain.com:444
  • ii. 第二种解决方案是为每个站点分配一个独立的ip,这样冲突就解决了,甚至主机头也不用添加了。
  • iii. 第三种解决方案是使用通配符证书。我们采用通配符证书颁发给.domain.com,对于我们的示例中,应该采用颁发给.marei.com的证书,这样任何访问该domain的请求均可以通过该证书解密,证书匹配错误也就不复存在了。
  • iv. 第四种解决方案是升级为IIS8,IIS8中添加的对于SNI(Server Name Indication)的支持,服务器可以通请求中提取出相应的主机头从而找到相应的证书。

SNI开启方式请参考https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability

 

2. Nginx中实现

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

server {
    listen 443;
    server_name domain1;
    ssl on;
    ssl_certificate 磁盘目录/订单号1.pem;
    ssl_certificate_key 磁盘目录/订单号1.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
   ssl_ciphersAESGCM:ALL:!DH:!EXPORT:!RC4: HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
   ssl_prefer_server_ciphers   on;
   location / {
       root   html;
      index  index.html index.htm;
    }
}

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

server {
   listen 443;
  server_name dommain2;
  ssl on;
  ssl_certificate 磁盘目录/订单号2.pem;
  ssl_certificate_key 磁盘目录/订单号2.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4: HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
  ssl_prefer_server_ciphers on;
  location / {
      root html;
      index index.html index.htm;
    }
}

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

 

3. Apache配置HTTPS虚拟主机共享443端口

Listen 443
NameVirtualHost *:443
< VirtualHost *:443 >
  ……
ServerName www.example1.com
SSLCertificateFile     common.crt;
SSLCertificateKeyFile  common.key;
SSLCertificateChainFile  ca.crt
  ……
< /VirtualHost >
< VirtualHost *:443 >
  ……
ServerName www.example2.com
SSLCertificateFile     common2.crt;
SSLCertificateKeyFile  common2.key;
SSLCertificateChainFile  ca2.crt

  ……
< /VirtualHost >

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/tech/6615.html

发表评论

登录后才能评论