在Apache文档中提到,不能在单个IP上同时有多个按名字识别的虚拟主机("named virtual host"),其实不完全是这样,接下来我们就来演示下如何打破这一魔咒。

  使用SNI

  SNI全称Server Name Indication(服务器名称指示),这个问题可以解决apache中的单IP多HTTPS虚拟主机,只有默认第一个站点的SSL生效的问题。但是这些技术需要浏览器的版本支持

  支持SNI的浏览器

  *Mozilla Firefox 2.0 or later

  *Opera 8.0 or later(the TLS 1.1 protocol must be enabled)

  *Internet Explorer 7(Vista,not XP)or later

  *Google Chrome(Vista,not XP)(NOT Chromium)

  *Safari 3.2.1 Mac OS X 10.5.6

  支持SNI的web容器

  *apache版本在2.2.12以上

  *需要mod_gnutls或者mod_ssl模块的支持

  *Openssl在0.9.8j后的版本也都支持了SNI的功能

  配置Apache

  打开Apache/conf/extra/httpd-vhost.conf文件并找到以下参数进行配置。

  Listen 443

  NameVirtualHost*:443

  <VirtualHost*:443>

  ServerName www.test1.com

  SSLOptions StrictRequire

  DocumentRoot/path/to/ssl/enabled/site

  SSLProtocol all-SSLv2-SSLv3

  注意,这里我们同时禁用了SSLv2、SSLv3不安全的协议。

  SSLHonorCipherOrder on

  SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

  SSLCertificateFile conf/server.crt

  SSLCertificateKeyFile conf/server.key

  SSLCertificateChainFile conf/ca.crt

  完成上述操作后,将CA证书ca.crt配置到该路径下。

  <Directory/path/to/ssl/enabled/site/>

  SSLRequireSSL

  Order Deny,Allow

  Allow from All

  </Directory>

  </VirtualHost>

  ```

  最后,保存httpd-vhost.conf文件并退出,使用https方式访问网站,测试证书配置是否成功。