Apache无法同时使用SSL运行两个虚拟主机

时间:2019-02-26 03:51:59

标签: apache ssl

我有一个httpd.conf文件,内容如下。

<VirtualHost demo.mydomain.com:443>
        DocumentRoot "/var/www/html/demo"
        ServerName "demo"
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/demo.mydomain.com.crt
        SSLCertificateKeyFile /etc/ssl/certs/demo.mydomain.com.key
        SSLCACertificateFile /etc/ssl/certs/demo.mydomain.com.ca-bundle
</VirtualHost>
<VirtualHost pay.mydomain.com:443>
        DocumentRoot "/var/www/html/pay"
        ServerName "pay"
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/pay.mydomain.com.crt
        SSLCertificateKeyFile /etc/ssl/certs/pay.mydomain.com.key
        SSLCACertificateFile /etc/ssl/certs/pay.mydomain.com.ca-bundle
</VirtualHost>

当我使用SSL检查器检查域时,一切看起来都很好。但是浏览器只能运行第一个。第二个错误pay.mydomain.com给出SSL错误,浏览器显示NET::ERR_CERT_COMMON_NAME_INVALID错误。

如果我删除第一个,则pay.mydomain.com开始工作。我不知道发生了什么,在这种情况下如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

仔细检查证书中的名称。您的虚拟主机已配置为响应名称paydemo,而无需任何其他域。适当的CA很可能根本不会为这些名称颁发证书。

您可以将名称放在开头的<VirtualHost>中而不是IP或*有点误导,这等效于在其中放置相应的IP,但不会发出httpd映射请求到该VirtualHost阻止和is discouraged的名称。

因此,我认为您看到的是pay和demo具有相同的IP,您使用完整的域名pay.mydomain.com访问,没有匹配的ServerName,因此默认(第一个) VirtualHost被选中。此时,连接失败,因为证书仅适用于名称demo.mydomain.com。 (我认为如果您的证书与ServerName不匹配,httpd会在启动时发出警告,但这不是致命错误。)

答案 1 :(得分:0)

替换

<VirtualHost demo.mydomain.com:443>
        DocumentRoot "/var/www/html/demo"
        ServerName "demo"
...
<VirtualHost pay.mydomain.com:443>
        DocumentRoot "/var/www/html/pay"
        ServerName "pay"
...

<VirtualHost *:443>
        DocumentRoot "/var/www/html/demo"
        ServerName demo.mydomain.com
...
<VirtualHost *:443>
        DocumentRoot "/var/www/html/pay"
        ServerName pay.mydomain.com
...