apache - 多个域和 SSL : all domains use my SSL certificate but I don't want?

标签 apache ssl

我的 apache 服务器上有通配符 SSL 证书。它适用于我的域,但错误是它适用于我的 apache 服务器上的所有域!我不想要它,当我继续 https://www.mywebsitewithouthttps.com , firefox 告诉我该页面不安全,因为证书是针对 www.mydomainwithhttps.com 的。如果我在浏览器上针对此 SSL 错误添加异常(exception),则显示的不是“mywebsitewithouthttps.com”,而是“mydomainwithhttps.com”(在此 URL 上:https://www.mywebsitewithouthttps.com)!

我不希望我的证书适用于所有其他域!这是一个大问题,因为 Google 正在使用 mydomainwithhttps.com 的内容在 HTTPS 上抓取我的所有其他域并将其编入索引:-(

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

最佳答案

如果您发出 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。

因此,为了确保机器人不会假设您的网站可以执行 HTTPS,您需要选择选项 1 或 2。另请注意,在所有这些情况下,您希望机器人支持 SNI,但并非所有做。因此,为了获得最佳兼容性,您需要为每个 HTTPS 站点使用单独的 IP 地址。

关于apache - 多个域和 SSL : all domains use my SSL certificate but I don't want?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367557/

相关文章:

php - 无法让 curl_exec 对 HTTPS url 起作用

security - 颁发者证书的到期状态是否会影响主体的到期?

apache - .htaccess 重定向到目录中的文件

python - 为什么在 apache 上找不到 python 模块

django - 白名单 http : content for Django application running SSL?

Azure Service Fabric - Owin 上的 Web Api - https 问题

ruby-on-rails - 我的 Ruby on Rails 项目中没有 gem 文件,捆绑安装/更新不起作用?

php - 关闭浏览器会阻止 PHP 脚本完成执行吗?

macos - 无法在 Mac Os Mojave 上停止或重新启动 Apache

php - 使用 app fog 更新 php 应用程序