在我的服务器上我有这个 apache 配置文件:
< VirtualHost *:80 >
ServerAdmin xxxx
DocumentRoot /www/a/b/c
< Directory /www/a/b/c > 其他配置数据 </Directory>
所有工作均由 /www/a/b/c 内的应用程序完成,它接受路由到此 apache 服务器的所有域,应用程序检测域并根据域提供不同的内容。
这样,当网站添加新域名时,我不需要重新配置 apache。用户只需登录网站注册新域名并填写 cms。同时将域名添加到他的 DNS 中。
该网站可以接收子域名以及不同的域名。
例如,所有这些域名都指向服务器的 IP:
domain1.com
domain2.com
maindomain.com
subdomain.maindomain.com
效果很好。
我现在需要的是每个域名的某些页面都具有 SSL。
我将拥有所有域名的证书文件。(我可以在一个 apache 和一个 IP 上拥有多个证书文件吗?)
我可以配置 apaceh 以在某种 if 语句中动态读取它们吗?或者我必须为每个域配置单独的 VirtualHost?
问候
答案1
您的问题比较简单 - 这是通配符证书吗?SSL 协商发生在 TCP 层,因此 SSL 必须绑定到 IP 地址。如果您有两个具有唯一证书的 SSL 站点,则需要两个 IP。如果您有通配符域证书 (*.foo.com),则可以将多个证书绑定到一个 IP。
如果您确实有一个用于该域的通用证书(通配符),那么可以通过一些 Apache-fu 来实现:
再次强调,只有当您使用一个通用证书时,这才有效。
答案2
看http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI 只要你的 apache 版本和 openssl 版本支持 SNI,适用于 SNI 的技术也适用于 apache 的通配符证书
您的客户端应用程序也需要支持 SNI。
答案3
我认为有一种方法可以在 apache 中使用 NameVirtualHost。当您命名主机时,它必须与它匹配的 VirtualHost 部分完全匹配...
类似于<NameVirtualHost staticIP:*443
.....或者类似的东西。