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

IIS中实现HTTPS

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

第一种解决方案将每个https站点绑定到不同的端口。但是这样的话客户端浏览网页时必须手动指定端口,例如https://site.domain.com:444

第二种解决方案是为每个站点分配一个独立的ip,这样冲突就解决了,甚至主机头也不用添加了。

第三种解决方案是使用通配证书。我们采用通配证书颁发给.domain.com,对于我们的示例中,应该采用颁发给.marei.com的证书,这样任何访问该domain的请求均可以通过该证书解密,证书匹配错误也就不复存在了。

第四种解决方案是升级为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

Nginx中实现HTTPS

打开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中支持多个证书。

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

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

假设有这样一个场景,我们有多个站点(例如site1.marei.com,site2.marei.com和site3.marei.com)绑定到同一个IP:PORT,并区分不同的主机头。我们为每一个SSL站点申请并安装了证书。在浏览网站时,用户仍看到证书不匹配的错误。IIS中实现HTTPS问题原因当一个https的请求到达IIS服务器时,https请求为加密状态,需要拿到相应的服务器证书...
最近需要在一个云 服务器 上搭建两个不同的网站,配置好nginx.conf后在http 域名 下测试成功,http://siteA.com 和 http://siteB.com都能正常访问且是访问不同的内容。 但在配置 ssl 证书、开启 Https 之后就出现问题了,无论是访问 https ://siteA.com 还是 https ://siteB.com 都是引用了siteA.com 的证书,导致 https ://siteB.com 无法正常访问。 访问Nginx的官网,上面有解释原因和提供了解决办法: Configuri
HowardSir0人评论6407人阅读2018-05-09 23:23:54 工作中经常会遇到多个 站点 实现 https 访问,并指向 同一 个网页,本文将详解如何在Centos 环境下配置Apache多 站点 实现 HTTPS 访问。 OS:CentOS release 6.8 (Final) Web:Apache 安装Apache 1、安装Apache [root@node1 ~]# yum install httpd -y 2、启动服务 [root@node
假设有这样一个场景,我们有多个 站点 (例如site1.marei.com,site2.marei.com和site3.marei.com)绑定到 同一 个IP:PORT,并区分不同的主机头。我们为每一个 SSL 站点 申请并安装了证书。在浏览网站时,用户仍看到证书不匹配的错误。 1. IIS中 实现 当一个 https 的请求到达IIS 服务器 时, https 请求为加密状态,需要拿到相应...
1、 服务器 生成一对公钥和私钥(不对称加密方式,此处的公钥简称<服公钥>,密钥简称<服密钥>) 2、 服务器 向CA机构进行通信,将<服公钥>交给CA机构 3、CA对<服公钥>进行数字签名,生成一个<数字签名>,将两者绑定在一起<公钥证书> 4、... 默认的 80 端口支持 https 的端口只有443。可以在访问 80 端口的时候,根据不同的 域名 来区分服务,也可以使用不同的 SSL 证书来验证访问。 但是如果是非 80 端口,并且也要支持 HTTPS ,就只能独立配置该端口使用 HTTP 或 HTTPS 其中的一种。 # HTTP 请求 server { listen 1234;
默认情况一个 服务器 的IIS只能绑定一个 HTTPS 也就是443端口 要 实现 多个 站点 对应 HTTPS 只能更改IIS配置 地址:C:\Windows\system32\inetsrv\config\applicationHost.config、 默认一个 站点 带一个这样的配置     &lt;binding protocol=" https " bindingInformation="*:443" /&...
一、 https 被redirect成了http近期项目中踩到一个坑,记录下来,以免后面再踩。背景:目前项目并不是全站的 https ,而是仅在F5上配置了 https ,其架构大致下面这样(这里先省略架构中的apache):. |( https ) F5 (LoadBa...
今天在 域名 升级到 HTTPS 的时候遇到websocket的链接问题,之前在http下使用的是new WebSocket('ws://xxx');但是在切换到 HTTPS 后这个链接部分浏览器报错甚至代码整体抛出异常走不下去了,之前没有注意过websocket在两个不同协议下有什么不同,实际上按照标准来是有如下对应关系的 http ->new WebSocket('ws://xxx') ht...
key12315: 点赞一下,很详细的教程,我参考后很快处理好了,另外分享我结合阿里云免费SSL证书+百度云加速到个人站点的集成配置: 使用百度云加速服务进行配置网站https证书(例如:阿里云免费SSL证书) https://config.net.cn/server/cloudserver/f6584545-7ec1-443a-b5c1-25d68e6079d1-p1.html#heading-0 SSL和SSH有什么区别 早班车的蜗牛: ssl作用主体是客户端和internet的安全协议,ssh作用主体是两个客户端远程安全访问协议, 挺明白的呀 SSL和SSH有什么区别 说了跟没说一样,就是罗列信息,没有实质区别内容。 Caddy配置SSL证书 Fireway2008: header/Strict-Transport-Security"max-age=31536000" 楼主,这句话意义何在? 如果改为其他值会怎么样