具有多个域的通配符 SSL
Posted
技术标签:
【中文标题】具有多个域的通配符 SSL【英文标题】:Wildcard SSL with Multiple Domains 【发布时间】:2012-10-30 15:40:42 【问题描述】:我有一个 CentOS/Apache+OpenSSL 服务器。我托管两个带有通配符子域的域名(应用程序逻辑显示正确的站点),例如
https://*.testing1.com
https://*.testing2.com
它在 HTTP 上工作得很好:-
<VirtualHost *:80>
# Admin email, Server Name (domain name) and any aliases
ServerAdmin webmaster@testing1.com
ServerName testing1.com
ServerName testing2.com
ServerAlias *.testing1.com *.testing2.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /home/app/public_html/public
</VirtualHost>
我已经为 testing1.com 和 testing2.com 购买了两个通配符 SSL 证书,但我不确定如何在这个结构中设置它:-
<VirtualHost *.testing1.com:443>
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/*.testing1.com.crt
SSLCertificateKeyFile /etc/httpd/ssl/*.testing1.com.key
SSLCACertificateFile /etc/httpd/ssl/geotrust.cer
ServerAdmin john@testing1.com
ServerName testing1.com
ServerAlias *.testing1.com
DirectoryIndex index.html index.php
DocumentRoot /home/app/public_html/public
</VirtualHost>
<VirtualHost *.testing2.com:443>
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/*.testing2.com.crt
SSLCertificateKeyFile /etc/httpd/ssl/*.testing2.com.key
SSLCACertificateFile /etc/httpd/ssl/geotrust.cer
ServerAdmin john@testing2.com
ServerName testing2.com
ServerAlias *.testing2.com
DirectoryIndex index.html index.php
DocumentRoot /home/app/public_html/public
</VirtualHost>
上面的 SSL 不起作用,对于 *.testing1.com 定义,也不只是 testing1.com。
我还需要为 testing2.com 重复此操作
【问题讨论】:
我在这里有点超出我的深度,但 /etc/httpd/ssl/*.testing1.com.crt 不是文件路径吗?它可以有一个星号吗?为菜鸟道歉 【参考方案1】:基于名称的虚拟主机和 SSL 仅在所有虚拟主机都在同一个域中并且您拥有该域的通配符 SSL 证书时才有效。
但是您有 2 个不同的域。
在这种情况下,只有为每个启用 SSL 的虚拟主机提供它自己的 IP 地址,它才会起作用。 所以你应该使用基于 IP 的虚拟主机,而不是基于名称的。
说明: 请求的 ServerName 包含在 HTTP 请求标头中,但在此之前必须已设置 SSL 加密。因此,ServerName 仅在设置加密后可用。因此,Apache 永远无法知道您提供了哪个 SSL 证书,而只会使用该特定 IP 地址上可用的第一个证书。
【讨论】:
【参考方案2】:使用单个专用IP,我们可以在centos + apache2.2服务器中配置基于域的通配符SSL。
希望下面的配置对大家有所帮助!!
NameVirtualHost IP:80
NameVirtualHost IP:443
域 1
<VirtualHost IP:80>
ServerName abc.domain1.com
DocumentRoot /var/www/html/domain1
</VirtualHost>
<VirtualHost IP:443>
ServerName *.domain1.com
DocumentRoot /var/www/html/domain1
SSLEngine On
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /var/www/html/domain1/cert/5465456.crt
SSLCertificateKeyFile /var/www/html/domain1/cert/domain1.com.key
SSLCertificateChainFile /var/www/html/domain1/cert/g2-g1.crt
</VirtualHost>
域 2
<VirtualHost IP:80>
ServerName abc.domain2.com
DocumentRoot /var/www/html/domain2
</VirtualHost>
<VirtualHost IP:443>
ServerName abc.domain2.com
DocumentRoot /var/www/html/domain2
SSLEngine On
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /var/www/html/domain2/cert/5465456.crt
SSLCertificateKeyFile /var/www/html/domain2/cert/domain1.com.key
SSLCertificateChainFile /var/www/html/domain2/cert/g2-g1.crt
</VirtualHost>
【讨论】:
谢谢,如果我想将两个不同的 https 域指向同一个DocumentRoot
怎么办?以上是关于具有多个域的通配符 SSL的主要内容,如果未能解决你的问题,请参考以下文章