子域和主域上的SSL - ehost

时间:2017-02-23 10:28:54

标签: apache ssl subdomain

我的提供商问题 - ehost。

我有通配符证书。我想在我上线之前先测试它。所以我首先请求在子域上安装它(uat.domain.com)。我已经测试了应用程序,并希望上线。提供商表示,无法在主域(domain.com)上安装证书,因为他们首先在子域上安装了证书。

当然,他们让我从他们那里购买证书。

我真的不明白这个问题是否可以告诉我他们是否有权?我认为甚至可以从ehost获取certficate并将其发送给另一个提供商并安装它。证书现在安装在Apache Server上,而子域和主域的文件夹位于同一服务器中。

1 个答案:

答案 0 :(得分:1)

不看实际配置很难说,但回答你的问题,如果他们说这是不可能的,那是因为他们只是在他们的服务器中使用1个VirtualHost。

通常,共享主机存在这些问题,因为它们将1个单独的Apache实例专用于许多不同的客户端,并且每个客户端有1个虚拟主机,但这只是猜测您需要检查这是当前发生的情况。

但我也可以描述Apache的工作原理,以便您了解可能发生的事情:

如果Apache配置具有不同的虚拟主机,则可以拥有与虚拟主机一样多的不同证书,通配符等等。

这是每个VirtualHost的1个证书。

但并非全部,如果您有多个不同的域名或子域名,那么您需要仔细规划必须如何配置它们。

例如

如果您先定义了此虚拟主机:

<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.com
</VirtualHost>

将不会应用或使用whatever.example.com或example.com的其他虚拟主机,因为此虚拟主机将获取这些名称的所有请求。

但如果你有:

<VirtualHost *:443>
ServerName domain.com
</VirtualHost>

现在您需要为子域定义带有新通配符证书的虚拟主机,您可以使用* .example.com的新通配符证书完美地执行:

<VirtualHost *:443>
ServerName xxxxx.example.com
</VirtualHost>

现在可以为* .example.com使用相同的通配符证书来定义更多虚拟主机:

<VirtualHost *:443>
ServerName yyyyy.example.com
</VirtualHost>

请注意,这些是虚拟主机示例(显然,您的虚拟主机将在其中包含更多指令,特别是加载密钥和证书的指令等)。

简而言之,您需要考虑的事项:

  1. Apache HTTPD查看Host标头,以了解它必须向哪个虚拟主机发送请求。
  2. 如果您重叠名称或定义过于贪婪的连词,如果之前的虚拟主机与请求的主机名匹配,则进一步定义的虚拟主机可能永远不会收到请求。这是虚拟主机列表中的第一个匹配胜利。
  3. Apache允许每个虚拟主机拥有1个证书,但是如果您在多个虚拟主机中使用相同的证书并不重要。
  4. 如果使用ServerAlias,则必须注意不要重叠名称和通配符。拥有两个覆盖相同名称的虚拟主机只会使httpd忽略同名的第二个虚拟主机。
  5. 如果您有不同虚拟主机的多个不同文件,则按字母顺序读取其文件,因此如果您有一个带有servername 1.example.com的a-virtualhost.conf和带有servername 1.example的b-virtualhost.conf。 com,b-virtualhost.conf将被忽略。