服务器多站点多域名https实现 |
假设有这样一个场景,我们有多个站点(例如site1.marei.com,site2.marei.com和site3.marei.com)绑定到同一个ip:port,并区分不同的主机头。我们为每一个ssl站点申请并安装了证书。在浏览网站时,用户仍看到证书不匹配的错误。
当一个https的请求到达iis服务器时,https请求为加密状态,需要拿到相应的服务器证书解密请求。由于每个站点对应的证书不同,服务器需要通过请求中不同的主机头来判断需要用哪个证书解密,然而主机头作为请求的一部分也被加密。最终iis只好使用第一个绑定到该ip:port的站点证书解密请求,从而有可能造成对于其他站点的请求失败而报错。
打开 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_ciphers aesgcm: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中支持多个证书 listen 443 namevirtualhost *:443
…… servername www.example1.com sslcertificatefile common.crt; sslcertificatekeyfile common.key; sslcertificatechainfile ca.crt …… …… servername www.example2.com sslcertificatefile common2.crt; sslcertificatekeyfile common2.key; sslcertificatechainfile ca2.crt …… |