blogにHTTPSを適用する(Apache設定編)

  • 投稿日:
  • by
  • カテゴリ:

サーバー証明書を用意できたら、それをWebサーバーに配置して利用できるようにします。

ウチのWebサーバーは FreeBSDの portsから導入した Apache 2.2を使用しています。
以前は blog以外に静的Webページもあったので、www.still-laughin.com と blog.still-laughin.com の2つをバーチャルホストで作成しています。
wwwの方は管理用に「オレオレ証明書」を使っています。 そこに blog用の「公的証明書」を追加する形になります。

まず RapidSSLから送られてきたメールからサーバー証明書と中間CA証明書を保存します。 ここではサーバー証明書は blog.crt、中間CA証明書は blog.cer という名称にしました。
それから RapidSSLの「CSR・秘密鍵生成ツール」で生成しダウンロードした秘密鍵(コモンネーム.key)も blog.key という名前に短くしておきます。

用意ができたら上記の3つのファイルを FTPクライアントを使って Webサーバーにアップロードします。
アップロード先は Webサーバーのドキュメントルートから外れたところにします。 ここでは Apacheの設定ファイルのディレクトリ(/usr/local/etc/apache22/)にしてみます。

ところでこの秘密鍵ですが、「CSR・秘密鍵生成ツール」は復号化してくれていないので、このままでは Apacheの起動時にパスフレーズの入力を求められます(実際にはエラーになって起動しない)。
FreeBSDで以下のように復号化します。

# mv blog.key blog.key.back
# openssl rsa -in blog.key.back -out blog.key

復号化が終わったら、Apacheの設定を行います。 自分の場合は、SSL関係は /usr/loal/etc/apache22/extra/httpd-ssl.conf にまとめて記述しています。

NameVirtualHost *:443 ← 追加
SSLCompression off ← 追加
 
#<VirtualHost _default_:443> ← 既存(www)のブロック先頭をコメントアウト
<VirtualHost *:443> ← 追加
    SSLProxyEngine on
    SSLEngine on
    SSLProtocol +TLSv1.2 ← TLSv1.2しか使わないというタカビーな設定
    SSLCipherSuite EECDH+AESGCM:!DSS:!DH ← 最新ブラウザしか相手にしない
    DocumentRoot /usr/local/www/
    ServerName www.still-laughin.com:443
    (中略)
</VirtualHost>
 
<VirtualHost *:443> ← ここから下を追加
    SSLProxyEngine on
    SSLEngine on
    SSLProtocol +TLSv1.2
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:DH+AES:RSA+AESGCM:RSA+AES:!EXP:!LOW:!aNULL:!eNULL:!ADH:!DSS:!MD5:!PSK:!SRP:!RC4:!3DES ← 比較的最近のブラウザを対象
    SSLHonorCipherOrder on
    Header add Strict-Transport-Security "max-age=15768000"
    DocumentRoot /usr/local/blog
    ServerName blog.still-laughin.com:443
    SSLCertificateFile /usr/local/etc/apache22/blog.crt
    SSLCertificateKeyFile /usr/local/etc/apache22/blog.key
    SSLCertificateChainFile /usr/local/etc/apache22/blog.cer
</VirtualHost>

ちなみに参考にしたのは以前にも紹介した『» ApacheのSSL設定を考えた TECHSCORE BLOG』です。 ありがとうございます。
あと『SSL/TLS 暗号設定ガイドライン』はちょっと長すぎるので、『Internet Week 2014 セッションS14 サーバーのSSL/TLS設定のツボ』がオススメです。

HTTP接続(ポート80番)の方の設定は /usr/loal/etc/apache22/extra/httpd-vhost.conf にありますが、こちらは変更していません。 まだ両方でアクセスできる状態です。

設置後、数時間は「情報不足のため、この証明書を検証できません」という表示が出るかもしれませんが異常ではありません。 時間が経てば消えます。