こちらの有名な研修資料を見ていたが、後半のハンズオンで出てくる証明書周りのイメージがピンときていなかったので、メモ。わかりやすく面白いので、今日のある方は是非。
資料が特殊な説明をしている訳ではありません。一般的な知識の整理です。
いつも出てくるのは以下3つの証明書
- サーバー証明書
- 中間証明書
- ルート証明書
これらに関してよくみる説明は以下のようなもの
- サーバー側が持つものはサーバー証明書・中間証明書
- ルート証明書というのが証明の連鎖の起点に存在している
これらについて、以下の疑問があった。
- ルート証明書の実体はどこに存在している?
- 普段手元のPCからブラウザなどでアクセスする際、どうやってルート証明書による認証を行っている?
結論は、「OSやブラウザにプリインストールされていて、これを都度使っている」。
CAはたくさんあってプリインストールし切れるものではないのでは?と思ったが、例えばmacなら、信頼しているCAの数は150程度ある(2024年5月現在。CAのリストはAppleで公開されている https://support.apple.com/ja-jp/103272)
信頼しているCAは莫大な数存在しているものと想像していたが、そんなことはなかった。
node等で、以下のようにして証明書を作ることが可能。
bash
# CAを作成(仰々しい!)
npm exec mkcert create-ca
# 作成したCAを使って、証明書を作成
npm exec mkcert create-cert
# CAをキーチェーンに登録し、サーバー証明書が信頼される状態にする
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./ca.crt