我有一个运行在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。 如果您希望默认情况下将此类stream量转移到某处,则可以设置一个默认的安全虚拟主机,将所有安全stream量与虚拟主机不匹配的虚拟主机redirect到具有正确证书的安全虚拟主机。