子域和主域上的 SSL - ehost
SSL on subdomain and primary domain - ehost
我的提供商 - ehost 有问题。
我有通配符证书。我想在上线前先测试一下。所以我要求先将它安装在子域上 (uat.domain.com)。我已经测试了应用程序并希望上线。提供商表示无法在主域 (domain.com) 上安装证书,因为他们已先在子域上安装证书。
他们当然让我从他们那里购买证书。
我真的不明白这个问题谁能告诉我他们是否正确?我认为甚至可以从 ehost 获取证书并将其发送给另一个提供商并安装它。证书现在安装在 Apache 服务器上,子域和主域的文件夹位于同一台服务器中。
如果不看实际配置很难说,但是回答你的问题,如果他们说这是不可能的,那是因为他们只是在他们的服务器中使用 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>
现在可以定义更多的虚拟主机,如果你 want/need 使用相同的通配符证书 *.example.com:
<VirtualHost *:443>
ServerName yyyyy.example.com
</VirtualHost>
请注意,这些是精简的虚拟主机示例(显然您的虚拟主机中会有更多指令,特别是加载密钥和证书等的指令)。
简而言之,您需要考虑的事项:
- Apache HTTPD 查看主机 header 以了解它必须将请求传送到哪个虚拟主机。
- 如果您重叠名称或定义过于贪婪的服务器别名,如果先前的虚拟主机与请求的主机名匹配,则进一步定义的虚拟主机可能永远不会收到请求。这是,虚拟主机列表中的第一个匹配项获胜。
- Apache 允许您为每个虚拟主机拥有 1 个证书,即使您在多个虚拟主机中使用相同的证书也没关系。
- 如果您使用 ServerAlias,您只需要注意不要重叠名称和通配符。拥有两个同名的虚拟主机只会让 httpd 忽略同名的第二个虚拟主机。
- 如果不同的虚拟主机有几个不同的文件,它们的文件将按字母顺序读取,所以如果你有 a-virtualhost.conf 和服务器名 1.example.com 和 b-virtualhost。 conf 也与服务器名 1.example.com、b-virtualhost.conf 将被忽略。
我的提供商 - ehost 有问题。
我有通配符证书。我想在上线前先测试一下。所以我要求先将它安装在子域上 (uat.domain.com)。我已经测试了应用程序并希望上线。提供商表示无法在主域 (domain.com) 上安装证书,因为他们已先在子域上安装证书。
他们当然让我从他们那里购买证书。
我真的不明白这个问题谁能告诉我他们是否正确?我认为甚至可以从 ehost 获取证书并将其发送给另一个提供商并安装它。证书现在安装在 Apache 服务器上,子域和主域的文件夹位于同一台服务器中。
如果不看实际配置很难说,但是回答你的问题,如果他们说这是不可能的,那是因为他们只是在他们的服务器中使用 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>
现在可以定义更多的虚拟主机,如果你 want/need 使用相同的通配符证书 *.example.com:
<VirtualHost *:443>
ServerName yyyyy.example.com
</VirtualHost>
请注意,这些是精简的虚拟主机示例(显然您的虚拟主机中会有更多指令,特别是加载密钥和证书等的指令)。
简而言之,您需要考虑的事项:
- Apache HTTPD 查看主机 header 以了解它必须将请求传送到哪个虚拟主机。
- 如果您重叠名称或定义过于贪婪的服务器别名,如果先前的虚拟主机与请求的主机名匹配,则进一步定义的虚拟主机可能永远不会收到请求。这是,虚拟主机列表中的第一个匹配项获胜。
- Apache 允许您为每个虚拟主机拥有 1 个证书,即使您在多个虚拟主机中使用相同的证书也没关系。
- 如果您使用 ServerAlias,您只需要注意不要重叠名称和通配符。拥有两个同名的虚拟主机只会让 httpd 忽略同名的第二个虚拟主机。
- 如果不同的虚拟主机有几个不同的文件,它们的文件将按字母顺序读取,所以如果你有 a-virtualhost.conf 和服务器名 1.example.com 和 b-virtualhost。 conf 也与服务器名 1.example.com、b-virtualhost.conf 将被忽略。