单IPVPS配置多个SSL站点

本文共被喵星人侦察过12,040次。。。

最近在VPS上已经搭建了一个自用的Glype翻墙,为了避免被GFW我就配置了一个StarSSL,用HTTPS访问。最近闲着没事儿我又想给我的iLazyCat.com的一个子域名也配置一个SSL,但是弄的时候却发现,貌似不能配置两个SSL证书,无论怎么配置都只有一个证书,分别访问两个域名总有一个提示域名不匹配,喵了个咪的~这就达不到我想要的效果了。。。Google一番才发现,SSL证书貌似只支持一个IP地址绑定一个证书,不能在同一个IP地址上面给不同的域名分别配置SSL证书。。。除非去购买多域名专用的证书。。。不过我查了下,多域名的证书都贵的要死要活的,低成本才是我的目标~

Https

于是乎,经过另外一番Google,终于发现了这个在单一IP地址上面可以配置多个域名SSL证书的方法,嘻嘻。。。

首先科普。。。

SSL协议层位于HTTP协议层之下,HTTP协议是被封装在SSL协议中的,所以SSL会话必须在HTTP会话之前建立。因为在建立SSL会话的最初握手阶段,服务器无法知道HTTP请求头的Host字段的内容,也就无法确定究竟使用哪个虚拟主机的配置(例如允许使用哪些加密算法、服务器证书是哪个等等),于是Apache就会使用匹配这个IP地址端口对的第一个主机的SSL配置。

正因为如此,我们便不能在一个IP地址上配置不同的SSL证书。。。

但是真的只能这样了么?OH当然不是。。。Apache从2.2.12之后就开始支持SNI了。。。如果你的Apache版本在2.2.12以下的话,就去更新一下吧。更新完了我们继续~关于SNI的信息可以到这里找到。。。

确认Apache版本在2.2.12以上之后,就可以开始配置多个SSL证书了。

首先修改Apache的配置,开启SNI和分域名分配主目录。。。

SSLStrictSNIVHostCheck on
NameVirtualHost *:443

之后就可以用配置普通HTTP主机的方法配置HTTPS的站点了~比如这样。。。


<VirtualHost *:443>
DocumentRoot "/home/xCat/"
ServerName xCat.me
SSLEngine on
SSLCertificateFile "/home/SSL/xCat.crt"
SSLCertificateKeyFile "/home/SSL/xCat.key"
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/iLazyCat"
ServerName iLazyCat.com
SSLEngine on
SSLCertificateFile "/home/SSL/iLazyCat.crt"
SSLCertificateKeyFile "/home/SSL/iLazyCat.key"
</VirtualHost>

最后配置完了重启Apache

service httpd restart

这样之后就可以了~赶快去试试效果吧~~~

额对了,这样配置的服务器最好自己用。。。因为不是所有的浏览器都支持SNI哦。。。不支持SNI的话就无法访问了哦。。。

The client browser must also support SNI. Here are some browsers that do:  以下浏览器支持SNI:

Mozilla Firefox 2.0 or later   火狐2.0或更高
Opera 8.0 or later (with TLS 1.1 enabled)  Opera8.0或更高,需要开启TLS1.1
Internet Explorer 7.0 or later (on Vista, not XP)   IE7或更高(Vista以上,XP不支持)
Google Chrome 不解释。。。
Safari 3.2.1 on Mac OS X 10.5.6  不解释。。。

嘻嘻,这个方法适用于配置自用的代理服务器,但是如果你的站点是商业或者其他的站点的话。。。最好就老老实实的买独立IP吧。。。