ssl不能在Ubuntu的NATTY和多个域名上工作

在我的服务器上运行SSL有一些麻烦。 我只需要它在这个盒子上的两个域名之一。 我有两个IP,我在DNS上使用Alogging来将域指向不同的IP。

这是我的httpd.conf:

NameVirtualHost XX.XX.XXX.X1:80 NameVirtualHost XX.XX.XXX.X2:80 NameVirtualHost XX.XX.XXX.X2:443 <VirtualHost XX.XX.XXX.X1:80> ServerName domain1.com ServerAlias .* WSGIScriptAlias / /home/domain1/domain1.wsgi </VirtualHost> <VirtualHost XX.XX.XXX.X2:80> ServerName domain2.me DocumentRoot /var/www/domain2 </VirtualHost> <VirtualHost XX.XX.XXX.X2:443> ServerName www.domain2.me DocumentRoot /var/www/domain2 ServerAdmin [email protected] SSLEngine ON SSLCertificateFile /etc/apache2/ssl/domain2.me.ssl/domain2.me.crt SSLCertificateKeyFile /etc/apache2/ssl/domain2.me.ssl/domain2.me.key SSLCACertificateFile /etc/apache2/ssl/domain2.me.ssl/gd_bundle.crt </VirtualHost> 

希望有什么明显的错误跳出来。 这里有两个要点与我尝试过的其他configuration的链接。 第一个只是尝试使用apache的snakeoil证书:

Snakeoil证书

另一个失败的尝试类似于这里发布的一个

基本上,当我拉起https://www.domain2.me时,会出现“页面不可用”的情况。

提前致谢。

更新:问题是iptables没有configuration为接受端口443上的stream量。我接受EightBitTony的答案,因为他的configuration工作完美后,我修好了我的iptables。

这个设置适用于我(这是默认的Debian的东西,几乎没有变化)。

在ports.conf中

 NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> 

这匹配你的。

然后,对于我的每个虚拟主机(非SSL),

 <VirtualHost *:80> ServerName domain.example:80 DocumentRoot "/some/path/to/html" UseCanonicalName Off <Directory "/some/path/to/html"> ... stuff .... </Directory> </VirtualHost> 

和SSL

 <VirtualHost *:443> ServerName ssl-domain.example:443 UseCanonicalName Off DocumentRoot "/some/path/to/ssl-html" <Directory "/some/path/to/ssl-html"> ... stuff ... </Directory> SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost> 

我想你应该使用UseCanonicalName Off以便服务器根据客户端传递的详细信息生成URL,以便获取正确的端口和名称。 全部细节在这里 。

最后,您需要确保相关的SSL模块已启用,我认为这是您的情况(但这是为了完整性)。

更新:除了监听正确的端口之外,还需要确保iptables不会阻塞或丢弃端口443上的SSLstream量。