“服务器应该是 SSL-aware 但没有配置证书”

pix*_*ine 7 mod-ssl apache-2.4

Ubuntu 14.04 Apache 2.4.7 w/mod_ssl

我正在尝试安装(单个)域证书。出于某种原因,如果启用了相关网站,apache 不接受它并拒绝启动。尽管大量谷歌搜索,我无法理解错误消息。为什么说没有配置证书?它设置在虚拟主机中,并指向正确位置的 crt 文件。

错误日志

[Tue May 19 18:11:08.123857 2015] [ssl:emerg] [pid 10040:tid 140146576725888] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
[Tue May 19 18:11:08.123894 2015] [ssl:emerg] [pid 10040:tid 140146576725888] AH02312: Fatal error initialising mod_ssl, exiting.
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  • 双重检查虚拟主机语法以及证书和密钥的路径
  • 双重检查的证书是 chmoded 644,密钥是 chmoded 600
  • 双重检查证书有效。从我的提供商处重新下载。在编辑器中打开

这是虚拟主机

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName www.domain.tld
        RedirectMatch (.*) https://domain.tld$1
    </VirtualHost>

    <VirtualHost _default_:443>
        ServerAdmin admin@localhost
        ServerName domain.tld
        DocumentRoot /home/user/www/domain.tld/public

        # SSL CERTIFICATES

        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/domain.tld.crt
        SSLCertificateKeyFile /etc/ssl/private/domain.tld.key
        SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem
        SSLVerifyClient None
        # SSLProtocol all -SSLv2 -SSLv3

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown


        <Directory /home/user/www/domain.tld/public>
            Require all granted
        </Directory>

        LogLevel error
        ErrorLog ${APACHE_LOG_DIR}/user-eu-error.log
        CustomLog ${APACHE_LOG_DIR}/user-eu-access.log combined

        ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/user/www/domain.tld/public/$1

        ErrorDocument 404 /missing.php

        # Mod_status
        <location /server-status> 
            SetHandler server-status 
            Order Allow,Deny
            Allow from all
        </location>
    </VirtualHost>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

关于可能出什么问题的任何建议?

Mac*_*ity 9

我认为 eltrai 走在正确的道路上,但我会删除第一个<VirtualHost>块并ServerAlias在第二个块中使用

<VirtualHost _default_:443>
    ServerAdmin admin@localhost
    ServerName domain.tld
    ServerAlias www.domain.tld
Run Code Online (Sandbox Code Playgroud)

您可以RedirectMatch在同一块中添加稍后从 www 重定向到非。


小智 6

还有一件事要检查,之前的答案中没有提到。

如果您在全局配置中的任何地方(基本上在 VirtualHost 和类似块之外的任何地方)都有“SSLEngine on”,并且您没有全局定义的 SSLCertificateFile 指令,则 apache 会在它到达虚拟主机之前窒息而您会得到这个错误。

错误消息实际上是正确的,但没有提到哪个服务器没有证书。


elt*_*rai 5

您的第一个虚拟主机(用于 www.domain.tld)没有启用 SSL,即使它在端口 443 上。

您需要添加 SSLEngine, SSLCertificateFile, ... 和第二个一样,否则 www.domain.tld 将无法访问 https。

我不太确定它是否会导致断然拒绝开始,但是......