<目次>
(1) 公開鍵基盤(PKI)の仕組みと証明書の役割について
記事の「目的」と「前提」
(1-0) STEP0:全体像
(1-1) STEP1:証明書の正当性チェック
(1-2) STEP2:鍵交換
(1) 公開鍵基盤(PKI)の仕組みと証明書の役割について
記事の「目的」と「前提」
(目的)
・公開鍵基盤(Public Key Infrastructure)を用いた「クライアント」と「サーバー」間の通信の流れを理解する
・その流れの中で「証明書」が果たす役割を理解する
(前提)
・サーバー側で「証明書」の発行と公開準備が完了しており、クライアントからのアクセスを受け付けられる状態であること
(1-0) STEP0:全体像
「クライアント」と「サーバー」が暗号化通信を始めるためには、ざっくり以下の流れの処理があります。
・STEP1:証明書の正当性チェック
→信頼できる相手かどうか?を最初にチェックします
・STEP2:鍵交換
→チェックがOKなら、実際にデータのやり取りを行うための「データ鍵」の交換を行います
(図111)
以降はSTEP1とSTEP2について、それぞれもう少し掘り下げてみます。
(1-1) STEP1:証明書の正当性チェック
●①「クライアント」→「サーバー」にブラウザ経由でリクエストを送る
・「https://xxx.com」宛てにHTTPSリクエストを送ります。
・http[s]で送る事により、暗号化通信を形成する事を要求します
↓
●②「サーバー」→「クライアント(ブラウザ)に「サーバー証明書」を送る
・証明書はアドレスの正当性を証明する
↓
●③「クライアント」→「CA局」→・・・→「ルートCA局」と信頼性・有効性の確認を行う
・証明書自体の信用を担保する上位のCA局を辿っていく。
・辿った結果「サーバー証明書」に事前に組み込まれた「ルートCA」局にたどり着いたら、検証OKと判断
↓
●④「クライアント」→「CA局」にCRLチェック(失効リストチェック)を行う
・OCSPプロトコル(Online Certificate Status Protocol)を使用
↓
●⑤チェック完了したら、暗号化チャネルを形成が可能になる
(図121)
(例)
・アクセスしようとするサイトの証明書
→3段階になっています。
(図122)
↓
・ご自身のPythonに下記のようなファイルがあると思います(Windowsの例)
C:\Users\[ユーザー名]\AppData\Roaming\Python\Python310\site-packages\certifi\ cacert.pem
(図123)
これがご自身の端末として信頼済みの証明書群であり、各CAの証明書がずらー-っと連結されています。
(1-2) STEP2:鍵交換
●①「クライアント」側で「データ鍵」を生成
・「データ鍵」はセッションの間中だけ、データを暗号化/複合化するのに使う
・「公開鍵」と「秘密鍵」の処理は一定の処理負荷(CPU)が掛かる
・よって、セッションの間は「データ鍵」を使用し、「データ鍵自体の暗号化」に公開鍵と秘密鍵を使う
↓
●②「クライアント」→「サーバー」に「データ鍵」を暗号化して送信する
・暗号化は「サーバー証明書」の「公開鍵」を使って行う
↓
●③「サーバー」側で「復号」を行う
・復号は「サーバー証明書」の「秘密鍵」を使って行う
・復号によって「データ鍵」を取り出せる
↓
●④以降の通信は「データ鍵」を使って行う
(図131)