WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。

概要

Googleさんの考え

サーバ証明書の選定

サーバ証明書の目的は通信の暗号化とそのサイトの実在証明である。
暗号化の強度は基本的に変わらないが、サイトを運営する組織の実在性をどれだけ求めるかによって、使用するサーバ証明書や費用が変わってくる。
その他、モバイルの対応率、複数ドメインの利用予定(ワイルドカード証明書)、サーバ証明書作成までの許容時間等も選定条件になりうる。
お金に余裕があるならEV認証で良いが、そうでないなら目的を踏まえてどの認証レベルのサーバ証明書を使うかを考える必要がある。
この辺の話は別途記載しよう…

設定の方針

個人で使用するサイト用のサーバ証明書なので、必然的にDVのものに限られる。(OV/EVは個人では取得できない。)
Let’s encryptの無料のサーバ証明書を使う方法もあるが、年間1,000円くらいであればいいかぁということで、FujiSSLのサーバ証明書を使います。

FujiSSL-安心・安全の純国産格安SSLサーバ証明書
https://www.fujissl.jp/

設定手順

FujiSSLのサイトの申込手順に沿って実施する。

準備

ドメイン使用権限の確認

ドメインを含むメールアドレスに送られたメール内容に基づいて操作を行って使用権限を確認するメール認証、指定ファイルをWebサイトに配置してクローラで確認してもらうファイル認証がある。申請時にどちらの認証を使用するか選択する必要がある。
当ドメインを含んだメールアドレスは持っていないことと、whoisは代行登録になっておりメールアドレスを公開しておらず、私の場合はメール認証は困難だと判断し、ファイル認証で進めた。

鍵ペア/CSRの生成

当サイトはLinux+Apacheなので、OpenSSLを使って鍵ペアの作成とCSRを作成する。
鍵の作成は”openssl genrsa”、CSRの作成は”openssl req”を使用する。
FujiSSLの手順書では、キーファイルの暗号化として”-des3″が指定されているが、より安全性の高い”-aes256″に変更して手順を実施した。CSR作成の時に入力するCommon Name以外の情報はDV認証の関係で消されてしまうので、適当な値を入れている。
(FujiSSL等のようなDVを使用する場合、ドメイン(Common Name)の検証はできるが、それ以外の組織の情報は検証できないので、ユーザに誤解を与えないよう証明書に表示しないようにしていると思われます。)

FujiSSLストアフロントから申請

ストアフロントから決済情報やCSR情報を入力し、ドメイン認証の方法(メール認証 or ファイル認証)を指定して、申請を完了させます。
私の場合はファイル認証を選択しました。
FujiSSLからメールで届いたファイルをWebサーバに配置し、5~10分ほどするとFujiSSL側で検証が完了し、サーバ証明書と中間証明書がメールで届きます。
サーバ証明書と中間証明書の内容はメール本文と、zip形式の添付ファイル(サーバ証明書:server.crt、中間証明書:ca-bundle.ca)にあります。コピペは間違いやすいので、ファイルをサーバにscpしました。

httpdへのサーバ証明書の組み込み

  1. 鍵とサーバ証明書を配置する。
    サーバ証明書関連は/etc/pkiの下のようだが、既定のものとは別に管理する意図で、/etc/httpd/conf/ssl下に証明書関連ファイルを配置する。Windows用の余計な改行コード(^M)が付いているので、trコマンドで削除しています。
  2. 鍵ファイルをオープンするためにスクリプトを配置する。
    鍵ファイルは暗号化されておりオープンするためにはパスフレーズの指定が必要であり、起動時にパスフレーズを入力する必要があります。
    現実的にこれは難しい運用になるので鍵ファイルの暗号化を解除するか、起動時にパスフレーズを指定できるような設定が必要になります。せっかく暗号化しているし…ちょっとだけ攻撃に対する耐性を向上するために、後者のパスフレーズを取得できる仕組みを採用します。
    これはapacheのSSLPassPhraseDialogディレクティブを使って実現できます。パスフレーズを出力するスクリプトを作成し、このディレクティブでそのスクリプトを指定します。
    このスクリプトはhttpd_keypp.shという名前します。
  3. SSLの設定を追加します。
    下記の内容はapache2.4.7以前で有効です。
    中間証明書の指定で使用しているSSLCertificateChainFileディレクティブは2.4.8以降では廃止になっています。2.4.8以降の方は、サーバ証明書のファイル(server.crt)の最後に中間証明書のファイル内容(ca-bundle.ca)を追加して、一つのファイルにし、このファイルをSSLCertificateFileディレクティブに指定する必要があるとのこと。

  4. 設定変更を反映するためにhttpdを再起動します。

動作確認

ブラウザでサイトを開き、セキュリティの警告が表示されなければ成功です。
問題がある場合はFujiSSLの確認ツールで問題の切り分けが行えます。

証明書インストール確認