我在端口 443 上有几个虚拟主机,每个虚拟主机都ServerName
设置了配置选项,并且还设置了正确的值SSLCertificateFile
,SSLCertificateKeyFile
具体值取决于虚拟主机。一切正常。
问题是,如果有人使用与任何 的值都不匹配的地址访问服务器ServerName
,那么我认为它默认使用第一个。我不希望它这样做。相反,我希望它不返回任何内容。目前,它将尝试在端口 443 上加载其他虚拟主机之一,结果浏览器中会抛出证书错误消息,因为证书上的地址不匹配,这是有道理的。
这可能吗?
对于端口 80 上的非 https 连接的相同场景,这很简单。我只需创建另一个ServerName
未指定选项的 vhost,它将成为默认选项,然后我可以让它显示 404。当我尝试完全相同的操作并在未设置属性的情况下为端口 443 创建条目时,ServerName
我无法启动 apache,这就是 error.log 文件中的内容。
[error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
有人知道我所尝试做的事情是否可行吗?
例如,假设现在我在端口 443 上有 2 个 vhost,并且正确的配置指向正确的证书,一个是 site1.com,另一个是 site2.com。任何人都可以通过浏览器访问这两个站点中的任何一个,并且一切正常。但是,如果有人访问 site3.com(并且它的 A 记录也指向与服务器相同的 IP),那么 apache 似乎会假定他们想要与 site1.com 对应的 vhost,并提供该服务,而我并不需要。相反,我希望 apache 不发送任何数据来请求 site3.com。我该如何实现这一点?
谢谢!
答案1
如果客户端尝试请求的域名没有有效的证书,HTTPS 连接将因证书错误而失败。您对此别无选择,他们通过 HTTPS 连接到您,而您没有可接受的证书可出示,在这种情况下,失败是注定的结果。
我认为您的问题可能是您在同一个 IP 地址上同时为 HTTP 和 HTTPS 网站提供服务。如果客户端尝试对仅设置 HTTP 的网站之一使用 HTTPS,并且您没有可用于此 HTTPS 连接的有效证书,则这样做会导致问题。
如果将仅使用 HTTP 的站点隔离到根本没有 HTTPS 的 IP 地址(甚至无法连接到 443/tcp),那么至少很明显 HTTPS 不可用。