23
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜmkcertでlocalhostに証明書をつけられるのか?仕組みを図解で理解する

Posted at

株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。
※ シンシアにおける働き方の様子はこちら

シンシアでは、年間100人程度の実務未経験の方が応募し技術面接を受けます。
その経験を通し、実務未経験者の方にぜひ身につけて欲しい技術力(文法)をここでは紹介していきます。

はじめに

ローカル開発でHTTPSが必要になり、mkcertを使うことになった。READMEに書いてある通りにコマンドを打てば動くけど、「なぜこれでlocalhostに証明書がつけられるの?」という疑問が湧いた。

調べていくうちに、SSL証明書の仕組み信頼ストアについて理解が深まったので、同じ疑問を持つ人向けにまとめる。

対象読者

  • mkcertを使っているけど仕組みがよくわからない人
  • SSL証明書の基本を理解したいジュニアエンジニア
  • 「信頼ストアって何?」という人

目次

内容
1 そもそもSSL証明書とは
2 信頼ストアの正体
3 mkcertが何をしているか
4 まとめ

そもそもSSL証明書とは

通常の証明書取得の流れ

自分のサーバーにSSL証明書をつけたい場合、通常は以下の流れになる。

認証局(CA: Certificate Authority) とは、「この証明書は本物ですよ」と保証してくれる第三者機関。DigiCert、Let's Encrypt、GlobalSignなどがある。

ブラウザはどうやって証明書をチェックするのか

ポイントは ③のチェックがローカルで行われる こと。ここで「信頼ストア」が登場する。

信頼ストアの正体

信頼ストアはあなたのマシンにある

よくある誤解: 「証明書の検証はインターネット上のどこかで行われている」

実際: 検証はあなたのマシン内で完結する。

信頼ストアとは、OSが「この認証局は信頼できる」と認めたCA証明書のリストを保存する場所。

実際に見てみよう

macOSなら、キーチェーンアクセスで確認できる。

  1. Spotlightで「キーチェーンアクセス」を開く
  2. 左サイドバーで「システムルート」を選択
  3. 「証明書」カテゴリを見る

100個以上のCA証明書が入っているのがわかる。これらはOSに最初から同梱されており、OSアップデートで定期的に更新される。

なぜローカルに持っているのか

毎回インターネットに問い合わせる方式だと:

  • 遅い
  • オフラインで動かない
  • 問い合わせ先が攻撃されたら全部危険

だから最初からOSに「信頼できるCAリスト」を同梱している。

mkcertが何をしているか

localhostに証明書を発行できない理由

通常の認証局(Let's Encryptなど)はlocalhostに証明書を発行しない。

理由:

  • localhostはグローバルに一意ではない
  • 誰でも所有を主張できてしまう
  • ドメイン所有権の検証ができない

mkcertの解決策:自分で認証局を作る

mkcertは自分専用のミニ認証局を作るツール。

mkcertのコマンドが何をしているか

# 1. 自分専用のCAを作成し、信頼ストアに登録
mkcert -install

このコマンドで「俺は認証局だ」という証明書を作成し、自分のマシンの信頼ストアに追加する。

# 2. そのCAでlocalhost用の証明書を発行
mkcert -key-file certificates/localhost-key.pem \
       -cert-file certificates/localhost.pem \
       localhost 127.0.0.1 ::1

自分のCAとして「localhost用の証明書」を発行する。

なぜこれでうまくいくか

ブラウザは「誰が発行したか」しか見ない。信頼ストアにあるCAが発行した証明書なら信頼する。

  1. 自分でCAを作る
  2. そのCAを信頼ストアに入れる
  3. そのCAでlocalhostの証明書を発行する
  4. ブラウザは「信頼ストアにあるCAの証明書だ」と判断して信頼する

自分で自分を信頼させる、ちょっとズルい仕組みだが、ローカル開発ではこれで十分。

注意点

  • この証明書はあなたのマシンでのみ有効
  • 他の人のマシンでは信頼されない
  • 本番環境では公的CAの証明書を使う必要がある

まとめ

疑問 答え
信頼ストアって何? OSに入っている「信頼できるCA一覧」
証明書のチェックはどこで? ローカルマシン内で完結
なぜlocalhostに証明書をつけられる? mkcertが自分専用のCAを作って信頼ストアに登録するから

理解のポイントは「証明書の検証はローカルで行われる」ということ。これがわかれば、mkcertの仕組みも納得できる。

参考

23
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?