きゃまなかのブログ

新卒6年目の WEB エンジニアです。 直近3年間は大規模システムの運用を担当していました。 今期から開発チームに移動になって、Java を勉強しています。 好きな言語が Ruby なので、Ruby 系の記事が多いです。

SSL 証明書をどうやって管理する?

概要

SSL 証明書を購入した時の話です。

購入した SSL 証明書をどうやって管理しようか悩んだことがあります。

開発に関するものは全て GitHub で一元管理しているので、SSL 証明書も GitHub に置きたいと思っていました。

SSL 証明書はインスタンスを作り直したり、増設する際にまた必要となります。

ただし、SSL 証明書を発行する際に使用した秘密鍵は他人に公開してはいけません。

秘密鍵が漏洩した場合、その秘密鍵を悪用して、不正な SSL 証明書を発行することが可能となります。

今回、自分が採用している、SSL 証明書の管理方法をまとめました。

SSL 証明書の購入

自分の場合、2000 ~ 3000円/1年間有効の SSL 証明書を購入しました。

SSL 証明書を購入する際は、ドメイン所有者の確認と申請内容の審査がありました。

審査が通ると SSL サーバ証明書と中間 CA 証明書がメールで送られてきました。

海外の格安 SSL 証明書と悩んだのですが、国内の SSL 証明書は利用するまでの流れが分かりやすく、発行までの時間も早かったので満足しています。

管理方法

基本的に以下の 3 つを GitHub で管理することになります。

  • SSL サーバ証明書(server.crt)
  • 中間 CA 証明書(intermediate.crt
  • 暗号化したサーバ秘密鍵(server.key.enc)

ただし、自分は開発に Nginx サーバを使っています。

Nginx では中間 CA 証明書を直接指定するディレクティグが用意されていないので、SSL サーバ証明書の後ろに中間 CA 証明書を結合して利用します。

なので、中間 CA 証明書は GitHub にアップロードしません。

また、サーバ秘密鍵をそのまま GitHub にアップロードするのは危険なので、暗号化してからアップロードするようにします。

暗号化

以下のコマンドを実行して、サーバ秘密鍵を暗号化します。

暗号化する際にはパスワードが必要となります。

$ openssl enc -e -des3 -in server.key -out server.key.enc

enter des-ede3-cbc encryption password: # パスワード入力

Verifying - enter des-ede3-cbc encryption password: # パスワード入力

復号化

インスタンスを作り直したり、サーバを増設する際には(暗号化していない)サーバ秘密鍵が必要となります。

もし、暗号化を解除したい場合には、以下のコマンドを実行してください。

$ openssl enc -d -des3 -in server.key.enc -out server.key

enter des-ede3-cbc decryption password: # パスワード入力

プライベートレポジトリの利用

できることなら、プライベートレポジトリを利用することをお勧めします。

GitHub のアカウントをアップグレード(有料)すれば利用できるようになります。

Upgrading your personal account - User Documentation

まとめ

自分が採用している SSL 証明書の管理方法をまとめました。

SSL 証明書は GitHub のプライベートレポジトリで、サーバ秘密鍵を暗号化した上で管理しています。