全球领先

认证服务商

国家首批首批CA机构

官方、权威、可信

虚拟主机SSL证书解决方案

由于全球互联网络的迅猛发展,IPv4资源逐渐成为一种稀缺资源。传统的SSL证书安装配置办法(也是目前最稳定的解决方法)就是为每个 https 主机使用不同的IP地址。

 

如果直接按照 http 主机的配置办法配置 https 主机,就会出现一个很普遍的问题:不论浏览器请求哪个主机,都只会收到默认主机(配置的第一个443端口的虚拟主机)的证书。这是由 SSL 协议本身的特性引起的——先建立SSL连接,再发送 https 请求(即加密主机头)。所以服务器端在与客户端建立SSL连接时不知道客户端所请求主机的名字,因此服务器端只会返回默认主机的证书。

 

目前已有两种可行的方案来实现多个 https 主机共享一个IP地址的443端口:

 

1. 使用支持多个域名的证书(多域名SSL证书 或 通配符SSL证书

多域名SAN(SubjectAltName)证书能够在一张证书中最多支持绑定25个域名。当需要为同一台物理服务器上的多个不同域名的主机配置SSL证书时,可通配置一张共享的多域名SSL证书来实现IP地址和端口的共享。只需将所有虚拟站点的域名绑定到这张多域名SSL证书中即可。

虚拟主机SSL证书解决方案-1

通配符SSL证书是在一个单一的证书中,通用名(域名)字段中包含一个“*”通配符字段(*.example.com)。这使得该证书可以支持无限制数量的多个子域名(主机)。这张通配符SSL证书也可作为虚拟主机的共享证书,为所有归属于同一域名下的二级域名实现https虚拟主机的IP地址共享。

 

对比多域名SSL证书和通配符SSL证书的产品特征可知,多域名SSL证书受到“SubjectAltName”字段的长度限制,最多支持25个域名。而通配符SSL证书虽然支持的域名数量不受限制,但只能支持同一域名下的二级子域名。在证书的应用中需要根据证书产品特点加以合理选择。

多域名SSL证书和通配符SSL证书在配置文件中的配置:

IIS上配置https虚拟主机共享443端口,微软官方资料参考:

http://technet.microsoft.com/zh-cn/library/cc756897.aspx

cscript.exe adsutil.vbs set /w3svc/ <site identifier> /SecureBindings “:443 :<host header>”

 

1.先设置为Web服务器和按照一般SSL证书的要求安装成功;

 

2.为了安全起见,请以一般用户(Users组)登录Windows 2003 Server,运行:

 

runas /profile /user: MyComputer  Administrator cmd

 

其中:MyComputer为服务器主机名,运行后会提示Administrator的密码,将以系统管理员身份运行DOS命令行。

 

3.在DOS命令行下运行:

 

cscript.exe adsutil.vbs set /w3svc/ <site identifier> /SecureBindings “:443:<host header> ”

 

其中: 可能需要明确指出adsutil.vbs的目录,如:C:InetpubAdminScripts,而<site identifier> 就是IIS自动分配给每个网站的网站标识符(默认站点为1,其他站点可在控制台中查询),<host header> 就是需要安装多域型SSL证书和通配型SSL证书的Web服务器域名。

 

4.退出DOS后,重启Web服务器后就已经生效了,可以都使用https://访问测试。

 

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

Listen 443

NameVirtualHost *:443

SSLCertificateFile     common.crt;

SSLCertificateKeyFile  common.key;

SSLCertificateChainFile  ca.crt

 

<VirtualHost *:443>

……

ServerName www.example1.com

……

</VirtualHost>

<VirtualHost *:443>

……

ServerName www.example2.com

……

</VirtualHost>

 

Nginx配置https虚拟主机共享443端口:

ssl_certificate      common.crt;

ssl_certificate_key  common.key;

server {

listen          443;

server_name     www.example1.com;

ssl             on;

}

server {

listen          443;

server_name     www.example2.com;

ssl             on;

}

 

 

2.开启SNI支持

SNI 是“Server Name Indication”的缩写,全称“主机名称指示”。开启SNI,可以允许一个443端口共享给多个虚拟站点,并且每一个虚拟站点都允许独立配置其唯一的证书密钥对。其优点是每个站点独享唯一密钥对,更安全。缺点是SNI受客户端及服务端程序版本限制,部分客户端及服务端程序无法支持。

 

TLS主机名指示扩展(SNI,RFC6066)允许浏览器和服务器进行SSL握手时,将请求的主机名传递给服务器,因此服务器可以得知需要使用哪一个证书来服务这个连接。但SNI只得到有限的浏览器和服务器支持。

SNI 客户端支持

 

Firefox 2.0 及后续版本

Opera 8.0及后续版本

Internet Explorer 7.0及后续版本(要求Windows最低Vista系统)

Google Chrome 所有版本(Windows版要求最低Vista系统)

Safari 3.2.1及后续版本(Mac OS版要求最低X 10.5.6 ;Windows版要求最低Vista系统)

 

 

 

SNI 服务器端支持

 

Nginx 0.5.32及后续版本

Apache 2.2.12及后续版本

IBM Http Server 7.0及后续版本

 

Apache 、Nginx 要求安装 Openssl0.98f(0.98j开始默认支持SNI) 或更高版本的 Openssl 支持。

 

SNI的配置

 

在Apache中配置SNI

 

在Apache配置文件中通过使用为不同Web Server指定不同证书文件进行配置。

Listen 443

NameVirtualHost *:443

<VirtualHost *:443>

……

ServerName www.example1.com

SSLCertificateFile    www.example1.com.crt

SSLCertificateKeyFile  www.example1.com.key

SSLCertificateChainFile  ca.crt

 

……

</VirtualHost>

<VirtualHost *:443>

……

ServerName www.example2.com

SSLCertificateFile    www.example2.com.crt

SSLCertificateKeyFile  www.example2.com.key

 

……

</VirtualHost>

开启虚拟主机配置

 

 

在Nginx中配置SNI

Nginx 中通过 nginx -v 命令查询当前已安装的版本对 SNI 功能的支持。在配置文件中通过

 

server {

listen          443;

server_name     www.example1.com;

ssl             on;

ssl_certificate      server1.crt;

ssl_certificate_key  server1.key;

}

server {

listen          443;

server_name     www.example2.com;

ssl             on;

ssl_certificate      server2.crt;

ssl_certificate_key  server2.key;

 

}

开启SNI支持。

 

 

在IBM Http Server 7中配置SNI

IBM Http Server 7中配置SNI支持需要将多个证书密钥对合并到一个单独的kdb文件中来为不同虚拟站点配置使用不同证书。

 

使用 I Key Manager 工具打开 www.example1.com 的服务器证书 key.kdb 文件,切换到“个人证书”选项卡,选择“导入/导出”。然后选择证书导入密钥库,密钥库格式选择“CMS”格式,并选中 www.example2.com 的服务器证书 key.kdb 文件。将 www.example2.com 的服务器证书 key.kdb 中已存在的证书密钥对导入到 www.example1.com 的 key.kdb 文件中。导入过程中,修改导入的密钥对别名为 example2。

 

Listen *:443

NameVirtualHost *:443

<VirtualHost *:443>

ServerName www.example1.com

SSLEnable

SSLServerCert example1 # example1 是在 kdb 文件中,为 www. example1.com 的服务器证书密钥对设置的证书别名

</VirtualHost>

 

<VirtualHost *:443>

ServerName www.example2.com

SSLEnable

SSLServerCert example2 # example2 是在 kdb 文件中,为 www. Example2.com 的服务器证书密钥对设置的证书别名

</VirtualHost>

SSLDisable

KeyFile /opt/IBM/HTTPServer/key.kdb

最新文章:

在线咨询

您好,请问有什么可以帮助您?

SSL证书/代码(数字)签名证书/https证书

天威诚信