我有一个域名: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