SSLを使用したApacheの構成
次の手順は、両方の安全なサーバーを(ポート上で)実行することを前提としています。 443
)および通常のサーバー(ポート上) 80
)。 まず、両方のポートでリッスンするようにサーバーを構成する必要があります。 どちらかを編集 /etc/apache2/ports.conf
(Debianで、これはに含まれています apache2.conf
)または編集 /etc/apache2/apache2.conf
行を直接含めるには:
聞く80聞く443
次に、編集 /etc/apache2/sites-enabled/yoursite
SSL設定を使用します。 VirtualHostsを使用して通常の安全なサーバー設定を分離することは、保守性の点で最も簡単なオプションです。 VirtualHostsセクション外の構成(ServerAdminの設定など)は、両方(およびその他の)VirtualHostに適用されます。
Apache 2.4.8以降のバージョンでは、サーバー証明書がXNUMXつのファイル内の中間証明書と連結されることを想定しています。 SSL.comからチェーンファイルをダウンロードするには、 Nginx
ポータルアカウントのダウンロードリンク:
または、次のようなコマンドを使用して、既存の証明書と中間ファイルを連結できます。
$ cat /etc/ssl/private/ca-bundle-client.crt >> /etc/ssl/private/yourdomain.crt
次のセクションを構成ファイルに追加します。
#================================================= #SSL /TLS 設定#================================================ = NameVirtualHost *:443 DocumentRoot "/ var / www / yoursite" SSLEngine on SSLCertificateFile /etc/ssl/private/yourdomain.chained.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key
この構成に関するいくつかの注意:
SSLEngine
サーバーがSSLを使用するように有効にする必要があります。DocumentRoot
この仮想ホストのルートディレクトリを設定します。 つまり、安全なコンテンツを通常のコンテンツから完全に分離することができます。SSLCertificateFile
サーバー証明書と中間チェーンを含むファイルを配置する場所に設定する必要があります。SSLCertificateKeyFile
秘密鍵ファイルを配置する場所に設定する必要があります。
次のセクションを構成ファイルに追加します。
#================================================= #SSL /TLS 設定#================================================ = NameVirtualHost *:443 DocumentRoot "/ var / www / yoursite" SSLEngine on SSLCertificateFile /etc/ssl/private/yourdomain.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile / etc / ssl / private / ca-bundle- client.crt
この構成に関するいくつかの注意:
SSLEngine
サーバーがSSLを使用するように有効にする必要があります。DocumentRoot
この仮想ホストのルートディレクトリを設定します。 つまり、安全なコンテンツを通常のコンテンツから完全に分離することができます。SSLCertificateFile, SSLCertificateChainFile,
&SSLCertificateKeyFile
証明書、中間ファイル、秘密鍵ファイルをそれぞれ配置する場所に設定する必要があります。
通常のサーバーをポート80で実行するには、次のセクションを構成ファイルに追加します。
NameVirtualHost *:80 DocumentRoot "/ var / www / yoursite"#ホスト固有のディレクトリ設定、オプションなど#これらのオプションのほとんどは、VirtualHostsセクションの外で設定される可能性があります。
編集した構成ファイルを保存したら、Webサーバーを再起動します。 証明書の生成時にパスフレーズを使用した場合は、チャレンジ時にパスフレーズを入力する必要があります。
テスト
コンテンツがまだない場合は、Webサーバーのルートディレクトリがある場所に基本的なindex.htmlページを作成します。
次に、Webブラウザで https://www.yoursite.com
。 SSL接続が開かれ、ページが配信されます。 自己署名証明書を使用している場合、ブラウザはサーバーのIDを確認できないことを警告するアラートをポップアップ表示します。 証明書を表示して受け入れることを選択できます。 外部証明書を使用する場合は、すべて介入なしで実行する必要があります。
また、保護されたコンテンツにhttp://を使用してアクセスできないことも確認してください。 実行しようとすると、エラーメッセージが表示されます。
トラブルシューティング
期待どおりに動作しない場合は、まずサーバーが実際に実行されていることを確認します。 ps -a | grep apache
。 それでも何も返されない場合は、再起動して、ターミナルのエラーメッセージを確認してください。
また、キーと証明書ファイルの権限が正しく設定されていること(上記を参照)、およびテストHTMLファイルとその親ディレクトリの権限も確認してください。
次に、ログを確認します。 メインサーバーのログと、上記の構成ファイルで設定したSSLログの両方を確認する必要があります。 何も役に立たない場合は、Apache2設定ファイルのLogLevel値を「debug」に変更し、Apache2を再起動して、もう一度テストしてみてください。 これにより、より多くのログファイルデータが得られるはずです。
ポート80でも通常のWebサーバーを実行している場合は、https://ではなくhttp://を介してテストページをフェッチして、問題がWebサーバーにあるのかSSL接続にあるのかを特定してください。 上記の設定では、Webサーバーのルートディレクトリがhttp://とhttps://で異なるため、同じコンテンツにアクセスできない(またはアクセスできないようにする)ことに注意してください。 ただし、http://ルートディレクトリのテストページが正常に機能し、https://ルートディレクトリのテストページが機能しない場合は、問題を特定するのに役立ちます。
問題がSSL接続である場合、便利なツールは s_client
、トラブルシューティング用の診断ツール TLS/ SSL接続。 基本的な使用法は次のとおりです。 /usr/bin/openssl s_client -connect localhost:443
。 他にも多数のオプションがあり、ドキュメントを確認できます。 エラーメッセージが表示された場合は、問題の特定に役立ちます。