コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
自己署名証明書を作る

サーバー運用実践:セキュリティ・監視・デプロイ

構築済みのnginxサーバーを、専用ユーザー・SSH鍵認証・ufwで保護し、HTTPS化、ログとヘルスチェックの監視、systemdタイマー、リリース切替、ロールバック、障害復旧までを実践します。本番を想定した安全な公開・監視・デプロイの基本を身につける30レッスンのコースです。

1
セキュリティのきほん
01. 専用ユーザーで動かす16分
02. SSH鍵認証16分
03. sshdを固める16分
04. ufwファイアウォール16分
05. ポートの棚卸し16分
06. ミッション サーバーを固める16分
07. 第4章クイズ12分
2
HTTPS
01. HTTPSとTLSのしくみ16分
02. 自己署名証明書を作る16分
03. nginxにHTTPSを設定16分
04. HTTPからのリダイレクト16分
05. ミッション HTTPS化完了16分
06. 第5章クイズ12分
3
運用と監視
01. tmuxで多重端末16分
02. ログローテーション16分
03. エラーログ監視16分
04. ヘルスチェック16分
05. systemdタイマー16分
06. ミッション 監視の自動化16分
07. 第6章クイズ12分
4
デプロイ
01. デプロイの型16分
02. シンボリックリンク16分
03. deploy.sh v216分
04. ロールバック16分
05. ミッション ワンコマンドデプロイ16分
06. 第7章クイズ12分
5
総合制作
01. ゼロから構築ミッション16分
02. 障害対応演習16分
03. 自由拡張16分
04. 完成と次のステップ16分

自己署名証明書を作る

証明書は、鍵とセットで作る

前の回で読んだ証明書には公開鍵が入っていました。ということは、証明書を作るには先に鍵のペアが要ります。作る手順は2段構えです。

  1. 秘密鍵と公開鍵のペアを作る
  2. 公開鍵と名前をまとめて、署名を付けた証明書にする

正式な証明書を取るときは、2つ目を発行元にやってもらいます。今回は自分でやります。だから自己署名です。

1行で作る

手順は2段ですが、コマンドは1つにまとめられます。

ターミナル

openssl req -x509 -nodes -days 365 \
  -newkey rsa:2048 \
  -keyout /etc/ssl/private/mysite.key \
  -out /etc/ssl/certs/mysite.crt \
  -subj "/CN=mysite.local"

指定の意味は次のとおりです。

  • req — 証明書を要求する形式を扱う道具
  • -x509 — 要求書ではなく、署名済みの証明書そのものを出す。これが自己署名にあたる
  • -nodes — 秘密鍵にパスフレーズを付けない。付けると nginx の起動のたびに人が入力を求められる
  • -days 365 — 有効期間
  • -newkey rsa:2048 — 鍵のペアも同時に新しく作る
  • -keyout と -out — 秘密鍵と証明書の置き場所
  • -subj — 対話で聞かれる項目をその場で渡す

-subj を省くと、国名や組織名を1つずつ聞かれます。大事なのは最後の CN で、ここにこの証明書が名乗るドメイン名を書きます。ここが接続先の名前と食い違うと、暗号化はできても本人確認に失敗します。

秘密鍵の権限を締める

ターミナル

chmod 600 /etc/ssl/private/mysite.key

証明書は誰に見られても構いません。むしろ配るものです。秘密鍵は逆で、漏れたらその時点で通信を復号されます。SSH の鍵と同じ扱いをしてください。/etc/ssl/private というディレクトリが最初から用意されているのは、そこに置くと決まっているからです。

作ったものを確かめる

ターミナル

openssl x509 -in /etc/ssl/certs/mysite.crt -noout -subject -issuer -dates

前の回と同じ読み方です。subject と issuer がどちらも CN = mysite.local になっているはずです。自分で自分を保証している、という形が、そのまま出力に現れます。

有効期限も見ておいてください。-days に書いた日数がそのまま notAfter になっています。証明書は必ず切れます。運用で最も多い事故のひとつが期限切れで、正式な証明書でも同じです。切れた瞬間、訪問者全員に警告が出ます。

鍵と証明書が対になっているか

うまく設定できないときの定番の原因が、鍵と証明書の取り違えです。別々に作ったものを組み合わせてしまうと、nginx が起動しません。同じものから出たかどうかは、それぞれの中身を要約した値を見比べれば分かります。

ターミナル

openssl x509 -noout -modulus -in /etc/ssl/certs/mysite.crt | openssl md5
openssl rsa -noout -modulus -in /etc/ssl/private/mysite.key | openssl md5

2つの出力が一致すれば対になっています。SSH の鍵で ssh-keygen -y を使ったのと同じ考え方です。

手を動かす

自分のサイト用の秘密鍵と自己署名証明書を作り、権限を締め、中身と対応を確かめます。

ヒント

証明書は配るもの、秘密鍵は絶対に配らないもの。権限の締め方が違います

CN に書いた名前と、実際に接続する名前が食い違うと本人確認に失敗します

  • 1. openssl req -x509 -nodes -days 365 -newkey rsa:2048 で鍵と証明書を同時に作る
  • 2. -keyout と -out で置き場所を指定する
  • 3. -subj "/CN=mysite.local" で名乗る名前を渡す
  • 4. chmod 600 /etc/ssl/private/mysite.key で秘密鍵を締める
  • 5. openssl x509 -noout -subject -issuer -dates の出力を /root/mysite-cert.txt に保存する

Linux は使うときに起動します(初回は約102MB通信します)

8 項目で採点します