我有一个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
开始工作。我不知道发生了什么,在这种情况下如何解决这个问题。
答案 0 :(得分:1)
仔细检查证书中的名称。您的虚拟主机已配置为响应名称pay
和demo
,而无需任何其他域。适当的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
...