假设有这样一个场景,我们有多个站点(例如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、
默认一个
站点
带一个这样的配置
<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和SSH有什么区别
早班车的蜗牛:
SSL和SSH有什么区别
Caddy配置SSL证书
Fireway2008: