証明書をインストール後発生する代表的なトラブルとその解決方法についての説明です。
以下に該当しないトラブルについては、メール(info@rms.ne.jp)でお問合わせください。
証明書をインストール後 Apacheの再起動に失敗することがあります。こうした場合はApacheのログファイルを調査するのが、最初に行うべき問題解決の手段です。
多くの場合、Apacheのエラーログに手がかりがあります。
Apacheのエラーログはデフォルトでは以下の位置にあります。
該当の場所にエラーログが見つからない場合は、httpd.conf などのApacheの設定ファイルでエラーログについての記述を調べてください。
Debian (Ubuntu): | /var/log/apache2/error_log |
Red Hat Enterprise Linux, CentOS: | /var/log/httpd/error_log |
Windows: | C:\Program Files\Apache Group\Apache2\logs\error.log |
Source Code からコンパイルした場合 : | /usr/local/apache2/logs/error_log |
以下がエラーログ記述の代表的なものとその場合の対応方法です。
このエラーログの記述は、秘密鍵と証明書がマッチしていないことを示しています。使用する証明書と秘密鍵の指定は ssl.conf 等のApacheの設定ファイルで行われていますので、意図した通りの指定になっているかをチェックしてください。一般的には VirtualHost ブロック内で、以下のように指定されています。
秘密鍵と証明書がマッチしているかどうかのチェックは以下のコマンドで行うことができます。
# openssl x509 -noout -modulus -in your_domain_com.crt | openssl md5 # openssl rsa -noout -modulus -in your_domain_com.key | openssl md5
コマンドを実行するとそれぞれ、(stdin)= 821c6adaea3e856aec9004d935cf6f25259 のようにチェックサム値を返します。秘密鍵と証明書がマッチしている場合はチェックサム値が一致します。
マッチしていない場合は以下のどちらかを実施してください。
このエラーはApacheでSSLを実現するために必須の mod_ssl がインストールされていないことを意味します。
CentOS/RedHat Linux の場合は以下のコマンドで mod_ssl をインストールできます。
# sudo yum install mod_ssl
Debian系の場合は以下のコマンドを実行してください。
# a2enmod ssl
このエラーは、サーバーとブラウザが相互認証する mutual authentication を指定している場合に発生します。SSL handshake 中に、サーバーの証明書と異なるクライアントの証明書が送られてくるとこのエラーになります。
このエラーが発生した場合は .conf ファイルの SSLVerifyClient あるいは SSLVerifyClient optional_no_ca を SSLVerifyClient none に変更後、Apacheを再起動してください。
このエラーは Windows サーバーにApacheをインストールした場合おこることがあります。
原因はApacheがインストールされたフォルダー名にスペースやカッコが含まれていることです。
スペースやカッコが含まれないフォルダーにApacheを移動してください。(例: c:/Program Files (x86)/Apache2/ -> c:/Apache/Apache2/)
あるいはフォルダー名にショートネームを使うのもよいでしょう。以下のコマンドを実行すればショートネームを確認できます。
C:\> dir /x C:\
ショートネームにチルダ ~ が含まれる場合は、バックスラッシュ\ でコメントアウトしてください。 (例: C:/Program Files (x86)/Apache2/ -> C:/Progra\~2/Apache2/)
最後にApacheを再起動します。
ブラウザが「このサイトの証明書は信頼性を検証できません。」のようなエラーを表示する場合は中間証明書をチェックしてください。
以下の項目をチェックし、問題が発見されたらそれぞれの対応を行ってください。
SSLの設定が他の .conf でも行われていて、重複設定になっている可能性があります。
httpd-ssl.conf, ssl.conf, virtual-host.conf, httpd.conf などをチェックしてください。
以下のコマンドを実行するとSSLの設定が行われているファイルを素早く探すことができます。(/etc/apache2/ は環境に合わせ ServerRootディレクトリを指定してください。
# grep -i -r "SSLCertificateFile" /etc/apache2/
Windows の場合は以下のコマンドになります。
# findstr /s /i "SSLCertificateFile" *.conf
SSLの設定が行われているファイルが見つかったら、重複設定を削除し、Apacheを再起動してください。
ブラウザが「安全な接続ができませんでした」「このサイトは安全に接続できません」等のエラーを返すことがあります。
httpでは正常にアクセスでき、httpsでこのエラーになる場合は以下をチェックしてください。
/conf/extra/httpd-ssl.conf, /conf.d/ssl.conf 等のSSL設定ファイル内には正しい設定が行われているのに、httpd.conf ファイルでこれらのファイルがインクルードされていないことがあります。
以下のように正しくインクルード設定されているかをチェックしてください。
行頭に # がある場合は、# を削除してください。
443ポートが利用可能かをチェックし、可能でない場合は、まずファイアウォールで443ポートを利用できるように設定してください。
その後、Apacheの設定ファイルで443をリッスンするように設定してください。
設定を行うファイルは環境により、httpd-ssl.conf, httpd.conf, ssl.conf 等です。書式は以下のようになります。
443をリッスンする設定が正しく行われているにもかかわらず問題が解決しない場合は、Apacheの起動に問題がある可能性があります。
初期バージョンのApache2ではSSL利用のためには以下のようなコマンドでApacheを起動する必要があります。
# path/to/httpd -D SSL -k start # path/to/apachectl startssl # path/to/httpd startssl
Windowsサーバーでは、「VirtualHost your.domain.com:443」を「VirtualHost _default_:443」に変更したことで問題が解決した例も報告されています。
<VirtualHost> ブロックで SSLEngine ディレクティブが以下のように「On」に設定されていることを確認ください。