我的apache服务器上有一个通配符SSL证书。它与我的域完美配合,但错误是它适用于我的apache服务器上的所有域!我不想要它,当我继续https://www.mywebsitewithouthttps.com时,firefox告诉我该页面不安全,因为该证书适用于www.mydomainwithhttps.com。如果我在浏览器上添加此SSL错误的例外,则不是" mywebsitewithouthttps.com"这是显示但是" mydomainwithhttps.com" (在此网址上:https://www.mywebsitewithouthttps.com)!
我不希望我的证书适用于所有其他域名!这是一个很大的问题,因为Google正在使用mydomainwithhttps.com的内容抓取所有其他域名的索引: - (
这是我的SSL虚拟主机:
NameVirtualHost *:443
<VirtualHost *:443>
ServerName www.mydomainwithhttps.com
DocumentRoot "/home/mydomainwithhttps/www"
suPHP_Engine On
suPHP_AddHandler x-httpd-php
suPHP_UserGroup mydomainwithhttps users
AddHandler x-httpd-php .php
SSLEngine on
SSLCertificateFile /certificates/ssl_certificate.crt
SSLCertificateKeyFile /certificates/www.mydomainwithhttps.com.key
SSLCACertificateFile /certificates/IntermediateCA.crt
</VirtualHost>
答案 0 :(得分:1)
如果您发出HTTPS请求,客户端将建立与服务器上相关IP和端口(通常为443)的TCP连接。如果连接成功,它将启动TLS握手,在TLS握手期间,它将获得证书以进行验证。
如果多个服务器位于同一IP地址和端口,则它们共享相同的TCP侦听器。由于TCP连接尝试没有关于目标服务器名称的信息,但只有目标IP地址和端口,因此侦听器将接受所有连接尝试,即使(尚未知的)目标主机名未配置HTTPS。
现代客户端然后在TLS握手内发送目标主机名,然后服务器才知道客户端想要什么。如果为所请求的名称配置了HTTPS,则服务器可以发送相应的证书。如果未为此名称配置HTTPS,则服务器将发送默认证书或关闭连接(可能在关闭时发送TLS警报)。
总之,这为您提供了以下选项:
SSLStrictSNIVHostCheck on
选项时,您可以这样设置Apache。如果此选项没有帮助,那么apache可能不支持这种设置。因此,为了确保机器人不会假设您的网站可以使用HTTPS,您需要选择选项1或2.请注意,在所有这些情况下,您希望机器人支持SNI,不是全部都这样做因此,为了获得最佳兼容性,您需要为每个HTTPS站点使用单独的IP地址。
答案 1 :(得分:0)
问题是Apache会尝试查找https://www.mywebsitewithouthttps.com/的配置,当它没有时,它将默认返回第一个https配置(mydomainwithhttps的配置)。
这将显示证书错误,但正如您所经历的那样,如果您点击,则会看到错误的网站。
但我不能理解谷歌抓取和索引网站。我原本以为它会在看到cert错误时停止?如果情况并非如此,我会感到非常惊讶,但是如果不是这样,你可以为那些主机名a重新定向重写到http。
只有两种方法:
这就是Apache(以及大多数 - 如果不是全部 - 其他网络服务器)的工作方式。
答案 2 :(得分:0)