目次
PKI(公開鍵基盤)とは
PKI(Public Key Infrastructure)とは、公開鍵暗号を安全に運用するための仕組み全体のことです。
WebサイトのURLがhttpsで始まる際の通信(SSL/TLS)などで使われています。
PKIを使用する際の手順
PKIを使用する際の手順は、大きく分けて以下2つのフェーズに分かれます。
1.証明書を発行するための事前準備
2.実際に通信を行う際の接続時のプロセス(TLSハンドシェイク)
1. 事前準備:デジタル証明書の発行とインストール
サーバーが安全な通信を提供するために、まず信頼できる第三者機関から証明書を取得します。
| 1.鍵ペアの生成 | サーバー管理者が、秘密鍵と公開鍵のペアを作成します。 |
| 2.CSR(証明書署名要求)の作成 | サーバー管理者が、CSR(申請書)を作成します。 CSRは、公開鍵・組織名・ドメイン名などをまとめています。 |
| 3.認証局(CA)への申請と審査 | CSRを認証局へ送ります。 登録局(RA)が申請者の身元やドメインの所有権を審査します。 |
| 4.証明書の発行 | 審査が通ると、認証局は、認証局自身の秘密鍵を使って電子署名を施し証明書を発行します。 |
| 5.サーバーへのインストール | サーバー管理者は、発行された証明書をサーバー(Nginx、Apache、AWSのACMなど)に設定し、利用可能な状態にします。 |
用語
| 公開鍵 | 誰に渡してもよい鍵。データの暗号化や、署名の検証に使います。 |
| 秘密鍵 | 本人だけが厳重に保管する鍵。データの復号や、署名の作成に使います。 |
| CSR | 認証局(CA)にデジタル証明書を発行してもらうための申請書。 |
| 認証局(CA) | この公開鍵は本物ですという証明書を発行する、信頼された第三者機関。 |
| 証明書 | 証明書には、持ち主の情報と公開鍵があり、認証局(CA)がこの情報は本物ですと証明している。 |
| 電子署名 | 証明書の内容が本物であることと改ざんされていないことを証明するためのデジタルのハンコです。 CAの秘密鍵で署名し、CAの公開鍵で誰でも検証できます。 |
認証局(CA)の例
- デジサート(DigiCert)やグローバルサイン(GlobalSign)などの民間企業。
- Let's Encrypt: 無料で証明書を発行できる非営利団体。
- AWS Certificate Manager (ACM): AWSが提供する、一般に信頼された証明書発行サービス。
2.実際の利用:クライアント接続時の手順(TLSハンドシェイク)
準備が整ったサーバーにクライアント(ブラウザなど)がアクセスした際、以下の手順で安全な通信が確立されます。
| 1.挨拶と証明書の提示 | クライアントからの接続要求に対し、サーバーはインストール済みの証明書を提示します。この中にはサーバーの公開鍵が含まれています |
| 2.証明書の検証(クライアント側) | クライアントは、ブラウザに内蔵されている信頼できる認証局(CA)のリストを使い、送られてきた証明書の署名が本物か(※)、期限切れでないか、ドメインが一致しているかを確認します。 (※認証局(CA)の公開鍵で証明書の署名値を複合し確認する) これにより、相手が本物のサーバーであることが確認されます。 |
| 3.共通鍵の生成(鍵交換) | サーバーの公開鍵を利用して、その通信の間だけ使用する共通鍵を安全に作り、共有します。 RSA方式(TLS1.2の古い方式): クライアントが作った共通鍵の種を、サーバーの公開鍵で暗号化して送ります。 Diffie-Hellman方式(TLS 1.3およびTLS 1.2のECDHE方式): お互いに計算し合って共通鍵を作ります。この際、サーバーの公開鍵は通信相手が本物であることの検証に使われます。 |
| 4.暗号化通信の開始 | 以降のデータやり取りは、作成した共通鍵を使って高速に暗号化・復号されます。 |
証明書は、SSLサーバー証明書のことを指しています。
※SSLはすでに廃止されたプロトコルで、現在は後継のTLSが使われています。ただSSL証明書という呼び方が業界に定着してしまったため、今でもTLS証明書のことをSSL証明書と呼ぶ慣習が残っています。
関連の記事
ルート証明書とは (Chromeで確認)
SSLサーバ証明書とは (Chromeで確認)
ローカル環境でhttps通信を行う(おれおれサーバ証明書)
