SSLサーバ証明書の購入からインストールまで


Webアプリケーションサーバのサーバ証明書をそれまでの Let's Encrypt から有料証明書に置きかえる機会があったので、手順を説明する。

サーバ証明書とは

サーバ証明書は、認証局(CA)と呼ばれる審査機関に申請し発行してもらうものだ。
自分自身で発行することもできるが、これはオレオレ証明書(自己署名証明書)と呼ばれ、信用されない。
サーバ証明書には下表の3種類があり、Let's Encryptという認証局が発行できるのはDV証明書である。

証明書種類 保証範囲
ドメイン認証(DV)証明書 ドメイン名の所有権のみを保証
企業認証(OV)証明書 ドメイン認証に加え、申請した組織の実在性を保証
拡張認証(EV)証明書 企業認証に加え、ドメイン権利者組織実在の確実性を保証

DV証明書では、申請者が本当にそのドメインを持っているかどうかさえ確認できれば良いので、信頼性は劣るが発行が短期間で済む。(スピード審査を謳うところなら数分で終わる)

購入元の選定

通常のWebサービスであればDV証明書で十分だろう。本記事で候補とするのは、

  • グローバルサイン認証局のクイック認証SSL
  • デジサート認証局(旧ジオトラスト)のクイックSSLプレミアム

いずれも国内正規代理店を経由すると年間15,000円程度になる。
ここでは、比較的メジャーな代理店であるハイパーボックス社のSSLサーバ証明書サービス「ドメインキーパー」を例に、クイック認証SSLを購入してみよう。

CSR作成手順

CSRとは認証局に提出する署名リクエスト(Certificate Signing Request)のことだ。
認証局は提出されたCSRに認証機関としての署名をして、サーバ証明書を発行する。

ドメイン(コモンネーム)を example.com として解説する。

秘密鍵ファイルの作成

パスフレーズ設定ありで作成する場合
openssl genrsa -des3 -out example.com.key 2048
パスフレーズ設定なしで作成する場合
openssl genrsa -out example.com.key 2048

秘密鍵ファイルを外部に出すことは無いので、人目に触れない安全な場所に保管しておこう。

CSRファイルの作成

openssl req -new -key example.com.key -out example.com.csr

必要情報(DN=ディスティングイッシュネーム)を入力。

Country Name           : JP
State or Province Name : Tokyo
Locality Name          : Chiyoda-ku
Organization Name      : Example Co.,Ltd.
Unit Name              : 
Common Name            : example.com

申請時にDNを渡すことで、CSRの作成まで代行してくれる代理店もある。

サーバ証明書の取得まで

クイック認証SSLでは、書類不要のオンライン審査によるドメイン認証に対応している。
ドメイン認証、つまり、申請者がそのドメイン(コモンネーム)の所有者かどうかは、次のいずれかによって確認される。

  • メールによる確認
    ドメイン所有者のみが受信可能とされるメールアドレス(admin@コモンネーム、whoisに記載のメールアドレスなど)を準備する必要がある。

  • Webページによる確認
    認証局が指定するコードを、Webページのmetaタグに挿入する必要がある。

  • DNSによる確認
    認証局が指定するコードを、DNSのTXTレコードに追加する必要がある。

ここでは、お手軽なメールによるドメイン認証を選択する。
サーバ証明書を取得する流れは次の通りだ。

  1. ドメインキーパーにログイン
  2. コモンネームに example.com を入力
  3. クイック認証SSLを選択
  4. 作成したCSRファイルを貼付
  5. メール認証を選択
  6. 代理店に支払いが終わると、認証局(グローバルサイン社)からメールが届く
  7. メールに記載のURLにアクセスし、承認手続き
  8. メールでサーバ証明書と中間証明書が納品される

ちなみに、こうした認証局とのやり取りを、JSON形式のWeb APIとして仕様を標準化、自動で行うものがACMEプロトコルであり、ACMEクライアントをPythonで実装したものが、Let's Encryptが配布するcertbotである。

サーバ証明書のインストール

認証局が署名したサーバ証明書(*.crt)と、そのペアになる秘密鍵(*.key)をサーバにインストールする。

Apache2定義ファイルの編集

Apache2.4以降では、中間証明書を指定するSSLCertificateChainFileディレクティブが無いので、catコマンドなどでサーバ証明書ファイルに結合しておこう。

httpd.conf
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key

証明書の格納先パスが変わるような場合(Let's Encrypt標準インストール状態からの移行なら、たいてい変わると思う)、アプリケーション開発チームとの連携も忘れずに。
例えば、アプリケーション内の WebSocket が証明書の格納先パスを指定している場合がある。

ブラウザから確認

Apacheを再起動し、ブラウザの鍵ボタンなどから、証明書の発行者有効期間が変わっていることを確認できればOKだ。