具有不同 SSL 证书的域和子域虚拟主机

具有不同 SSL 证书的域和子域虚拟主机


我有一个域名:www.example.com我需要这个域名可以通过 https 和 http 访问。
我有一个证书 (GeoTrust),可以保护www.example.com和 example.com。

我也需要保护 app.example.com。app.example.com
需要仅通过 https 访问,但它不需要适当的证书:自签名证书就足够了。

我尝试了许多不同的配置(甚至对主域和子域使用相同的证书),但都不起作用!
以下配置是我尝试的后者,但结果是,如果我连接到 app.example.com,它会告诉我连接不受信任,然后,一旦被接受,它会将我重定向到www.example.com

有什么帮助吗?谢谢。

    <VirtualHost *:80>
        DocumentRoot "/var/websiteexample/public/www"
        ServerName www.example.com
        ServerAlias example.com
        <Directory "/var/websiteexample/public/www">
            allow from all
            Options +Indexes
        </Directory>
    </VirtualHost>

    <VirtualHost *:443>
        DocumentRoot "/var/websiteexample/public/www"
        ServerName www.example.com
        ServerAlias example.com
        SSLEngine on
        SSLCertificateFile /root/www.example.com.crt
        SSLCertificateKeyFile /root/www.example.com.key
        <Directory "/var/websiteexample/public/www">
            allow from all
            Options +Indexes
        </Directory>
    </VirtualHost>

    <VirtualHost *:443>
        DocumentRoot "/path/to/another/app"
        ServerName app.example.com
        SSLEngine on
        SSLCertificateFile /root/app.example.com.pem
        <Directory "/path/to/another/app">
            allow from all
            Options +Indexes
        </Directory>
    </VirtualHost>

答案1

  • 已添加SSLEngine on 到服务器配置
  • 已添加SSLStrictSNIVHostCheck on 到服务器配置 - 多个证书的 SNI,排除不支持 SNI 的客户端
  • 已添加SSLCertificateKeyFile /root/app.example.com.key- 您需要两个虚拟主机的私钥

这是新的配置:

SSLEngine on
SSLStrictSNIVHostCheck on
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:-MEDIUM

<VirtualHost *:80>
    DocumentRoot "/var/websiteexample/public/www"
    ServerName www.example.com
    ServerAlias example.com
    <Directory "/var/websiteexample/public/www">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/var/websiteexample/public/www"
    ServerName www.example.com
    ServerAlias example.com
    #You might also need: SSLCertificateChainFile 
    SSLCertificateFile /root/www.example.com.crt
    SSLCertificateKeyFile /root/www.example.com.key
    <Directory "/var/websiteexample/public/www">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/path/to/another/app"
    ServerName app.example.com
    SSLCertificateFile /root/app.example.com.pem
    SSLCertificateKeyFile /root/app.example.com.key
    <Directory "/path/to/another/app">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

答案2

您无法使用 SSL 进行基于名称的虚拟主机,因为名称来自“Host:”标头,这是加密内容的一部分。您需要先选择密钥,然后才知道要选择哪个密钥。

通常,每个唯一的密钥对都会使用一个额外的 IP 地址。您可以在以下网址找到一些很棒的示例和解释http://wiki.apache.org/httpd/NameBasedSSLVHosts

相关内容