前回の投稿から1年も経ってしまいましたが、発行した証明書をApacheに設定する方法を書きたいと思います。
今回は、発行されたサーバ証明書をApacheに設定して、設定後の確認までを行います。
証明書には有効期限が書いてある為、期限が切れた際は、更新だとしても同じ作業で交換する必要があります。
有効期限は発行時に決定しますが、1年~3年、長くても5年までのようです。
準備するもの
準備するものは以下の通りです。- XAMPP環境
- 秘密鍵ファイル
- サーバ証明書
- (中間CA証明書)
秘密鍵ファイルの作成やサーバ証明書の発行は、前回の記事を参照してください。
XAMPPでHTTPS通信!SSLのためのCSRの作り方
テスト用であれば無料の証明書を発行できる認証局がありますので、探してみてください。
証明書の発行に中間CAが存在する場合、中間CA証明書もApacheへの設定が必要です。
昨今は、中間CAが無いことのほうが珍しいので、中間CA証明書も送られてくる(または、認証局のサイトからダウンロードしてくるように指示される)と思います。
※最近は、中間CA証明書を設定しなくても自動的にダウンロードする仕組みやクライアント側に中間CA証明書を持っていて、問題なく認証できる場合もありますが、古い機器ではそういったシステムがないこともあるので、設定しておいたほうが良いと思います。
サーバ証明書の確認
サーバ証明書は、メールでファイルが添付されてくるか、メール本文にこのようなヘッダとフッタに囲まれた文字が送られてきます。
-----BEGIN CERTIFICATE-----
### 省略 ###
-----END CERTIFICATE-----
このヘッダとフッタを含めて証明書です。中間CA証明書も同じ形式なので、間違えないようにしましょう。
※ルートCA証明書も送られてくることがありますが、設定不要です。
まずは、自分のサーバ証明書が、何段階の認証になっているか確認しておきましょう。
例えば、3段階の証明書だとこんな感じです。
4段階だとこんな感じ
メールにどの認証局(段階)の証明書か、記載されていると思います。
英語で書かれている場合は、これを参考にしてください。
認証局 | Certification(またはCertificate) Authority(略して CA) |
---|---|
証明書 | Certificate |
ルートCA証明書 | Root CA Certificate |
中間CA証明書 | Intermediate CA Certificate |
サーバ証明書 | Web Server Certificate, Your SSL Certificate, (単に)Certificatenなど |
SSL証明書ファイルの作成
XAMPPではApacheに設定する為に、SSL証明書ファイルを作成する必要があります。SSL証明書ファイルは、ルートCA証明書以外を1つにまとめたファイルです。
証明書はテキストですので、すべてコピーしてくればOKです。
ヘッダとフッタも必要ですので、消さないようにしてください。
証明書はサーバ証明書を1番上に記述し、順に階層をさかのぼります。
例えば、4段階の場合は
- サーバ証明書
- 中間CA証明書2
- 中間CA証明書1
作るファイルはこんなふうになります。
-----BEGIN CERTIFICATE-----
### サーバ証明書 省略 ###
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
### 中間CA証明書2 省略 ###
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
### 中間CA証明書1 省略 ###
-----END CERTIFICATE-----
ファイル名については、XAMPPのデフォルトの設定では[server.crt]になっています。下記のSSLの設定で変えられますので好きな名前でOKです。
また、Apache 2.4.8より前のバージョンの場合は、SSL証明書ファイルの他にSSL証明書チェーンファイルが必要です。
SSL証明書ファイルはサーバ証明書のみで作成し、SSL証明書チェーンファイルは中間CA証明書で作成します。
中間CA証明書の順番はSSL証明書ファイルと同じで、中間CAがいない(ルートから直接発行された)場合はファイルは不要です。
Apache:httpd-ssl.confの設定項目
XAMPPでは、SSLの設定は httpd-ssl.conf に記載します。httpd-ssl.conf は、C:\xampp\apache\conf\extra\にあります(デフォルトでインストールした場合)。
サンプルの SSLProtocol や SSLCipherSuite は、IPAのSSL/TLS暗号設定ガイドラインの例を元に作成しています。
新たな脆弱性が見つかり、古い設定になっているかもしれないので、必ず最新の情報を確認してください。
サンプルを使用して、問題があった場合でも責任は負いかねます。
また、DocumentRoot やログなどの設定を省略していますので、適宜設定してください。
## 省略 ##
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384
# SSL証明書ファイル
SSLCertificateFile conf/ssl.crt/server.crt
# SSL証明書チェーンファイル(Apache 2.4.8より前は必要)
# SSLCertificateChainFile conf/ssl.crt/ca.crt
# 秘密鍵ファイル
SSLCertificateKeyFile conf/ssl.key/server.key
SSLHonorCipherOrder On
Header add Strict-Transport-Security "max-age=15768000"
Apache 2.4.8より前のバージョンの場合は、SSLCertificateChainFile にSSL証明書チェーンファイルのパスを設定してください。後は同じく SSLCertificateFile にSSL証明書ファイルへのパスを設定してください。秘密鍵ファイルも同様です。
Apacheを再起動するとSSLの設定が完了です。
HTTPSのチェック
設定したら、証明書の設定がうまくできているか確認してみましょう。必ず設定の確認は自分の責任配下のサーバのみに行いましょう。
1.コマンドでチェック
まず、ローカルで確認する場合は、opensslコマンドを使用します。
cd C:\\xampp\apache\bin\
openssl s_client -connect localhost:443 -showcerts
cdコマンドは、XAMPPはデフォルトのパス(C:\xampp\配下)にインストール場合のパスです。
表示された情報の中で「s:」となっているのが証明書の情報、「i:」となっているのがその証明書の発行者の情報です。2.外部サービスでチェック
コマンドで問題なく証明書情報が表示されたら、外部サービスを使って確認してみましょう。シマンテックやジオトラストなどがSSLのチェッカーを公開しています。
https://cryptoreport.websecurity.symantec.com/checker/views/certCheck.jsp https://cryptoreport.geotrust.com/checker/views/certCheck.jsp
公開しているドメインを入力してチェックしてみましょう。
Certificate is installed correctly
と表示されれば、問題ありません。
3.SSLの詳細なチェック
SSLの設定で、どの脆弱性があるか、どのブラウザから接続できるかテストできるサイトがあります。https://www.ssllabs.com/ssltest/index.html ※[Do not show the results on the boards]にチェックを入れないとテスト結果が公表されますので、注意してください。
終わりに
SSLを利用する設定は以上です。SSLのテストはしてみましたか?レーティングはAが取れたでしょうか?
SSLのセキュリティはApacheの設定以外にも、opensslやmod_sslのバージョンにもよりますので、アップデートが必要かもしれません。
今回は、基本的な設定なので、忘れないようにしておきたいですね。
今回、参考にさせていただいたサイトは以下の通りです。
httpd-ssl.confの設定 http://httpd.apache.org/docs/current/mod/mod_ssl.html https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html
HTTPSのチェックコマンド https://jp.globalsign.com/support/faq/07.html