是否可以获得通配符证书并使用 SNI?

She*_*Gee 4 https sni apache-2.2

我想让设置新的子域变得容易(至少在开发方面)并获得一个通配符证书,设置一个通配符 dns(已经完成并且效果很好)和设置 SNI(服务器名称指示)似乎是这样将适用于我们的 HTTPS 测试,但在谷歌上搜索我没有找到任何好的说明。这甚至可能吗?我读到的关于 SNI 的所有内容都说您需要为每个站点设置一个证书,而 SNI 只是可以根据主机名提供不同的证书。

lar*_*sks 5

如果您有通配符证书,您可以像没有 SSL 一样进行基于命名的虚拟主机。

在协商 SSL 连接时,您的 Web 服务器需要在收到任何 http 协议标头之前选择一个证书——这意味着,如果没有 SNI,Apache 无法在多个基于名称的虚拟主机之间进行选择。这就是为什么过去您需要为系统上托管的每个虚拟主机提供一个单独的 IP 地址。使用 SNI,客户端能够向服务器提供它希望连接的主机的名称。这允许服务器选择适当的虚拟主机配置,从而选择适当的证书。

如果您使用通配符证书,只要您的所有虚拟主机共享一个公共父域,您就可以避开这个问题。在这种情况下,不需要 SNI。因为证书对您的任何主机都有效,所以不需要您的 Web 服务器能够在 SSL 协商开始时识别适当的虚拟主机......这意味着您可以使用 HTTP 标头来识别主机,并且继续正常的基于名称的虚拟主机。

使用 Apache,您的配置将如下所示:

NameVirtualHost *:443

<VirtualHost *:443>
    ServerName foo.example.com
    DocumentRoot /sites/foo.example.com/html
    SSLEngine On
    # ...other SSL parameters...
</VirtualHost>

<VirtualHost *:443>
    ServerName bar.example.com
    DocumentRoot /sites/bar.example.com/html
    SSLEngine On
    # ...other SSL parameters...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

几年来,我们一直在生产环境中运行这种配置,没有出现任何问题。