我当前已定义以下 VirtualHosts。
NameVirtualHost *:80
Listen *:80
<IfModule mod_ssl.c>
Listen *:443
</IfModule>
<VirtualHost *:80>
--various directives for www--
</VirtualHost>
<VirtualHost *:443>
--same directives as *:80--
SSLEngine on
SSLCertificateFile /path/to/public.crt
SSLCertificateKeyFile /path/to/private.key
SSLCACertificateFile /path/to/intermediate.crt
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
</VirtualHost>
<VirtualHost 192.168.1.102:80>
--various directives for another subdomain--
</VirtualHost>
<VirtualHost 192.168.1.103:80>
--various directives for another subdomain--
</VirtualHost>
<VirtualHost 192.168.1.104:80>
--various directives for another subdomain--
</VirtualHost>
<VirtualHost 192.168.1.105:80>
--various directives for another subdomain--
</VirtualHost>
<VirtualHost 192.168.1.106:443>
--various directives for another subdomain--
SSLEngine on
SSLCertificateFile /path/self/signed/certificate.pem
--same ciphers and other settings as *:443--
</VirtualHost>
<VirtualHost 192.168.1.107:80>
--various directives for another subdomain--
</VirtualHost>
<VirtualHost 192.168.1.109:80>
--various directives for another subdomain--
</VirtualHost>
目前,一切都按预期运行。主 www 域名 *:80 及其在 *:443 上的安全连接在 SSLLabs.com 上获得 B 级评级
它给出的错误是:
- 此服务器支持弱 Diffie-Hellman (DH) 密钥交换参数。等级上限为 B。
- 该服务器不支持参考浏览器的前向保密。
我已将自定义 DH 参数放在公钥后面,但 DH 参数仍然出错。我不确定如何修复前向保密错误。
完成这一步后,我尝试添加一个新的 VirtualHost,这样我就可以将现在由新证书覆盖的各个子域移动到 SSL。
我添加了一个新的 VirtualHost:
<VirtualHost 192.168.1.109:443>
--Copied all directives from 192.168.1.109:80--
--Copied all SSL settings from *:443--
</VirtualHost>
当我运行 configtest 时,配置似乎已检查无误。当我重新启动服务时,Apache 不会向我提供任何似乎相关的错误消息(它总是给出一些 DNS 错误,但这是正常的,因为 VirtualHosts 中定义的 IP 是 DMZd IP,而不是公共 IP)。但是,我的任何网站都没有响应,apache2 显示为已停止。当我删除新的 VirtualHost 时,服务器立即恢复正常。
我的配置哪里错了?有人能给我指出正确的方向吗?
答案1
问题显然始终是 ServerName 错误。只要每个 IP 只有一个主机,它们就没问题,但添加第二个 IP(即使它在新端口上,因此有新的 VirtualHost 名称)不足以阻止 Apache 崩溃。
我为每个 VirtualHost 添加了一个 ServerName,尽管我们过去并不需要它们,现在新的 VirtualHost 安装没有任何问题。