SSL証明書 - toge510/homelab GitHub Wiki
SSL
- SSL(Secure Socket Layer)/ TLS(Transport Layer Security)
- 安全にデータを送受信するプロトコル。データの暗号化や通信相手の認証をしたりすることでデータを守る。
- バージョンアップ:SSL2.0 => SSL3.0 => TLS1.0 => TLS1.1 => TLS1.2 => TLS1.3
- どのバージョンを使用するかはSSLハンドシェイクにより決定。
SSLで防ぐことができる脅威
- なりすまし
- 改竄
- 盗聴
暗号化で盗聴を防ぐ
ハッシュ化で改竄を防ぐ
- データのハッシュ値も合わせて送ることで、受け取った端末において、受け取ったデータから計算したハッシュ値と、添付されていたハッシュ値を比較して、同じなら改竄されていないと判断できる。
証明書でなりすましを防ぐ
- 証明書でなしすましを防ぐ。証明書の情報を元に、通信相手の身元を確認することができる。
- 証明書が本物かどうかは、証明書に含まれる、認証局(CA, Certification Authority)のデジタル署名によって判断できる。
SSLを支える技術
共通鍵暗号方式
- SSLは、暗号化鍵と復号カビに同じ鍵(共通鍵)を使用する「共通鍵暗号方式」を使用。
- 通信相手に、どうやって、共通鍵を共有するか?が問題。鍵配送問題。
鍵交換アルゴリズム
- 公開鍵、秘密鍵を使用して安全に共通鍵を共有する。DHE,ECDHEといったアルゴリズムがある。
- 鍵配送問題を解決できる。
デジタル署名アルゴリズム
- 通信相手が信頼できるかどうかは、証明書に含まれるデジタル署名で判断する。
- デジタル署名は、RSA署名というデジタル署名アルゴリズムにより生成されている。
- RSA署名は、「ハッシュ化」と「公開鍵暗号方式」を組み合わせた技術。
- 公開鍵暗号方式:暗号化鍵と復号鍵に異なる鍵を使用する暗号方式。代表的なものでRSA暗号がある。RSA暗号は秘密鍵と公開鍵を逆にしても成立する特徴がある。
- RSA署名は、RSA秘密鍵を「署名鍵」にして、データの署名を生成し、送信する。受け取った受信者は、RSA公開鍵を「検証鍵」 として署名を検証する。
事前準備フェーズ
- サーバ管理者はWebサーバ-でRSA秘密鍵と、それに対応するRSA公開鍵を含むCSR(Certificate Signing Request)ファイルを作成する。
- CSR
- Common Name/SANs(FQDN,WebサイトのURL)
- Organization
- Organizational Unit
- Locality
- State or Province
- Country
- CSRとともに、認証局に証明書発行の申請をする。
- 認証局が申請元の身元審査をする。メール認証やDNS認証。
- サーバ証明書が発行される。
- RSA秘密鍵と、サーバ証明書をWebサーバにインストールする。
- 中間証明書(中間CA証明書、チェーン証明書)というサーバ証明書を発行した認証局の証明書もインストールする。
中間証明書について
- 認証局はたくさんのデジタル証明書を管理するために、「ルート認証局」と「中間認証局」という2種類の認証局で構成されている。
- ルート認証局は、ルート証明書(ルートCA証明書)を発行する。ルート証明書は、ルート認証局自身の秘密鍵でデジタル署名されている。
- 中間認証局は、サーバにインストールするサーバ証明書を発行する認証局。中間認証局は、上位の認証局の秘密鍵で署名を受けて、発行してもらう。
Webサーバに、中間証明書と、サーバ証明書をインストールすることで、ルート証明書は中間証明書を辿ってサーバ証明書を検証することができる。
- ブラウザにバンドルされているルート証明書が、ルート認証局の秘密鍵で署名された中間証明書を検証し、中間認証局の秘密鍵で署名されたサーバ証明書を検証する。