为单个VirtualHost启用SSL

我有一个运行在Ubuntu 14.04 LTS上的apache 2.4 webserver。

是否可以为单个VirtualHost启用SSL,而不影响其他VirtualHost(包括默认的)?

例如,在我的networking服务器,我有这个网站通过HTTP运行:

000-default.conf hello.com.conf welcome.com.conf secure.com.conf 

我没有启用default-ssl.conf

现在,我想在HTTPS(:443)下运行secure.com.conf ,所以我用a2enmod ssl启用了ssl插件,并以这种方式更改了VHostconfiguration:

 <VirtualHost *:443> ServerName www.secure.com ... SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.secure.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.secure.com/privkey.pem </VirtualHost> 

无论如何,当我重新启动apache与service apache2 restart失败,并说:

 [ssl:emerg] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0) [ssl:emerg] AH02312: Fatal error initialising mod_ssl, exiting. 

编辑:
通过添加SSLCertificateChainFile到configuration我设法启动networking服务器…

无论如何,如果我尝试加载(仅用于testing) https://hello.com secure.com现在想用secure.com证书来提供它和所有其他的VirtualHosts,当然浏览器NET::ERR_CERT_COMMON_NAME_INVALID给出错误: NET::ERR_CERT_COMMON_NAME_INVALID

该错误似乎表明letsencrypt证书在SSLCertificateFile的位置不可用。 没有证书,服务器不能提供SSL。 你是否正确安装了letsencrypt设置? 通常在你的/ etc / ssl / certs和/ etc / ssl / privatepath中有一个snakeoil自encryption证书。 您可以将其用于testing目的:服务器将运行正常,但浏览器会发出抱怨。

(1)检查您的私钥权限(2)您的CA CRT在哪里?

所以一般我们需要:

a)私钥,b)服务器CRT,c)root / CA CRT。

这是一个例子

 SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key SSLCertificateChainFile /etc/pki/tls/certs/DigiCertCA.crt 

如果你真的试图点击https://hello.com (例如http SECURE),这是因为Apacheparsing正确的虚拟主机的方式。 如Apache文档中所述 ,

基于名称的虚拟主机parsing仅在将候选缩小到最佳的基于IP的匹配之后select最合适的基于名称的虚拟主机。 当请求到达时,服务器将根据请求使用的IP地址和端口find最好的(最具体的)匹配参数。


如果在包含最具体匹配的IP地址和端口组合的虚拟主机组中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。

因此,在这种情况下,因为您已经询问了端口443服务,服务器可以尝试的唯一选项是www.secure.com虚拟主机(secure.com.conf)。 由于此时hello.com与secure.com不匹配,因此您会看到此错误。

这个错误是应该发生的,因为没有https://hello.com,只有一个http://hello.com&#x3002; 如果您希望默认情况下将此类stream量转移到某处,则可以设置一个默认的安全虚拟主机,将所有安全stream量与虚拟主机不匹配的虚拟主机redirect到具有正确证书的安全虚拟主机。