「サーバーは SSL に対応している必要がありますが、証明書が設定されていません」

「サーバーは SSL に対応している必要がありますが、証明書が設定されていません」

Ubuntu 14.04 Apache 2.4.7(mod_ssl 付き)

(単一の) ドメイン証明書をインストールしようとしています。何らかの理由で、Apache はそれを受け入れず、関連する Web サイトが有効になっていると起動を拒否します。グーグルで調べても、エラー メッセージの意味がわかりません。なぜ証明書が構成されていないと表示されるのでしょうか。証明書は仮想ホストに設定されており、正しい場所にある 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.

私が試したこと:

  • 仮想ホストの構文と証明書およびキーへのパスを再確認しました
  • 二重チェックされた証明書は chmode 644 で、キーは chmode 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>

何が問題なのか、何かアドバイスはありますか?

答え1

エルトライは正しい方向に進んでいると思うが、最初の<VirtualHost>ブロックを削除してServerAlias2番目に使用する

<VirtualHost _default_:443>
    ServerAdmin admin@localhost
    ServerName domain.tld
    ServerAlias www.domain.tld

RedirectMatch同じブロック内に後から追加して、www から non にリダイレクトすることもできます。

答え2

前の回答では触れられていなかった、確認すべきもう 1 つの点。

グローバル設定のどこかに「SSLEngine on」があり (基本的には VirtualHost および同様のブロックの外側のどこかに)、SSLCertificateFile ディレクティブもグローバルに定義されていない場合、Apache は仮想ホストに到達する前にこれを停止し、このエラーが発生します。

エラー メッセージは実際には正しいのですが、どのサーバーに証明書がないのかは示されていません。

答え3

最初の仮想ホスト (www.domain.tld 用) は、ポート 443 上にあるにもかかわらず、SSL が有効になっていません。

2 番目と同様に、SSLEngine、SSLCertificateFile などを追加する必要があります。そうしないと、www.domain.tld への https アクセスができなくなります。

しかし、それが開始を断固として拒否する原因になるかどうかはわかりません...

関連情報