株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。
※ シンシアにおける働き方の様子はこちら
シンシアでは、年間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なら、キーチェーンアクセスで確認できる。
- Spotlightで「キーチェーンアクセス」を開く
- 左サイドバーで「システムルート」を選択
- 「証明書」カテゴリを見る
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が発行した証明書なら信頼する。
- 自分でCAを作る
- そのCAを信頼ストアに入れる
- そのCAでlocalhostの証明書を発行する
- ブラウザは「信頼ストアにあるCAの証明書だ」と判断して信頼する
自分で自分を信頼させる、ちょっとズルい仕組みだが、ローカル開発ではこれで十分。
注意点
- この証明書はあなたのマシンでのみ有効
- 他の人のマシンでは信頼されない
- 本番環境では公的CAの証明書を使う必要がある
まとめ
| 疑問 | 答え |
|---|---|
| 信頼ストアって何? | OSに入っている「信頼できるCA一覧」 |
| 証明書のチェックはどこで? | ローカルマシン内で完結 |
| なぜlocalhostに証明書をつけられる? | mkcertが自分専用のCAを作って信頼ストアに登録するから |
理解のポイントは「証明書の検証はローカルで行われる」ということ。これがわかれば、mkcertの仕組みも納得できる。