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

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

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

我尝试了许多不同的configuration(即使对主域和子域使用相同的证书),但没有任何工作!
下面的configuration是我尝试的后者,但结果是,如果我连接到app.example.com,它会告诉我连接不可信,然后一旦被接受,它会将我redirect到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> 

  • SSLEngine on添加到serverconfig
  • SSLStrictSNIVHostCheck on添加到serverconfig – SNI以获取多个证书,排除不支持SNI的客户端
  • 添加SSLCertificateKeyFile /root/app.example.com.key – 你需要两个虚拟主机的私钥

这是新的configuration:

 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> 

您不能使用SSL进行基于名称的虚拟主机,因为名称来自“主机:”标头,这是encryption的一部分。 在知道select哪个键之前,您需要select密钥。

通常,每个唯一的密钥对使用一个额外的IP地址。 你可以在http://wiki.apache.org/httpd/NameBasedSSLVHostsfind一些很好的例子和解&#x91CA;