多个域和SSL:所有域都使用我的SSL证书,但我不想要?

时间:2016-05-21 20:15:52

标签: apache ssl

我的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>

3 个答案:

答案 0 :(得分:1)

如果您发出HTTPS请求,客户端将建立与服务器上相关IP和端口(通常为443)的TCP连接。如果连接成功,它将启动TLS握手,在TLS握手期间,它将获得证书以进行验证。

如果多个服务器位于同一IP地址和端口,则它们共享相同的TCP侦听器。由于TCP连接尝试没有关于目标服务器名称的信息,但只有目标IP地址和端口,因此侦听器将接受所有连接尝试,即使(尚未知的)目标主机名未配置HTTPS。

现代客户端然后在TLS握手内发送目标主机名,然后服务器才知道客户端想要什么。如果为所请求的名称配置了HTTPS,则服务器可以发送相应的证书。如果未为此名称配置HTTPS,则服务器将发送默认证书或关闭连接(可能在关闭时发送TLS警报)。

总之,这为您提供了以下选项:

  1. 为HTTPS站点和非HTTPS站点使用不同的IP地址。这样TCP连接就会失败,因为服务器没有侦听此IP:端口上的连接。
  2. 配置服务器,以便在客户端请求未配置HTTPS的主机名时返回错误。这样客户端可能会在浏览器中收到有关HTTPS问题的奇怪错误消息。我不确定,但是在使用SSLStrictSNIVHostCheck on选项时,您可以这样设置Apache。如果此选项没有帮助,那么apache可能不支持这种设置。
  3. 配置服务器以在名称不匹配或客户端不支持SNI时使用默认证书(通常是第一个配置的证书)。客户端将在浏览器中收到证书不匹配警告。这是您目前的设置。
  4. 通过拥有单独的证书或将所有证书全部包含在单个证书中,为所有域正确设置HTTPS。
  5. 因此,为了确保机器人不会假设您的网站可以使用HTTPS,您需要选择选项1或2.请注意,在所有这些情况下,您希望机器人支持SNI,不是全部都这样做因此,为了获得最佳兼容性,您需要为每个HTTPS站点使用单独的IP地址。

答案 1 :(得分:0)

问题是Apache会尝试查找https://www.mywebsitewithouthttps.com/的配置,当它没有时,它将默认返回第一个https配置(mydomainwithhttps的配置)。

这将显示证书错误,但正如您所经历的那样,如果您点击,则会看到错误的网站。

但我不能理解谷歌抓取和索引网站。我原本以为它会在看到cert错误时停止?如果情况并非如此,我会感到非常惊讶,但是如果不是这样,你可以为那些主机名a重新定向重写到http。

只有两种方法:

  1. 获取其他域的证书,以便您可以通过https进行连接。如果你真的想要,你仍然可以重定向回http。
  2. 使用https将服务器分离到不同的服务器(或同一服务器上的不同IP,并将Apache配置设置为仅在https IP地址上侦听端口443)。
  3. 这就是Apache(以及大多数 - 如果不是全部 - 其他网络服务器)的工作方式。

答案 2 :(得分:0)

您可以按照multi donain with ssl

在UBUNTU和RHEL上使用SSL和不同的证书配置多域