为具有相同文档根目录的不同子域设置两个 SSL

为具有相同文档根目录的不同子域设置两个 SSL

我有这个目录:

 /var/www/domain.com/web/domains/example.com
 /var/www/domain.com/web/domains/cdn.example.com
 /var/www/domain.com/web/domains/app.example.com

这意味着,我不指定每个网站子域名,但我只需在这个目录中创建子域名,我的.htaccess 将处理此事。

现在我正在解决这个问题 - 我有域名 app.example.com 的 SSL 证书,但我还需要为 cdn.example.com 设置 SSL,但我不知道如何设置。我尝试为 cdn.example.com 生成 SSL 证书,但无法为 cdn.example.com 设置它 -> 如果我尝试这样做:

echo | openssl s_client -connect cdn.example.com:443 2>/dev/null

我仍然看到,证书主题是app.example.com而不是cdn.example.com,因此我认为它仍在尝试为该域获取错误证书。

SSL 目录正确。你在我的example.com.vhost文件中看到任何错误吗?

<VirtualHost *:443>

        DocumentRoot /var/www/example.com/web

        ServerName app.example.com
        ServerAlias app.example.com

        <IfModule mod_ssl.c>
        SSLEngine on
        SSLProtocol All -SSLv2 -SSLv3
        SSLCertificateFile /var/www/clients/client1/web17/ssl/example.com.crt
        SSLCertificateKeyFile /var/www/clients/client1/web17/ssl/example.com.key
        </IfModule>

</VirtualHost>
<VirtualHost *:443>
        DocumentRoot /var/www/example.com/web

        ServerName cdn.example.com
        ServerAlias cdn.example.com

        <IfModule mod_ssl.c>
        SSLEngine on
        SSLProtocol All -SSLv2 -SSLv3
        SSLCertificateFile /var/www/clients/client1/web17/ssl/cdn/server.crt
        SSLCertificateKeyFile /var/www/clients/client1/web17/ssl/cdn/server.key
        </IfModule>

</VirtualHost>

答案1

您正在测试没有服务器名称标识符的 SSL。要为每个 IP 获得多个 SSL 证书,您的客户端需要使用信噪比扩大。

因此,要使用 OpenSSL 进行测试,您需要设置-servername。您的命令将是:

echo | openssl s_client -servername cdn.website.com -connect cdn.website.com:443

答案2

在 Apache 2.2 下,您需要指令 NameVirtualHost 来指定共享同一 IP 的不同虚拟主机。

您复制粘贴的配置中似乎缺少以下内容:

NameVirtualHost *:443

只需定义一次,Apache 2.2 就会根据请求的主机头知道每个请求应该传递到哪个虚拟主机。

相关内容