2月3日(火)1、2コマ目
今日、やったこと
[確認テスト]Linuxサーバー構築・運用
SSL/TLS
今日のホワイトボード
SSL/TLSとは
SSLはSecure Socket Layerの略。TLSはTransport Layer Securtyの略。
TLSはSSLの次世代版で、今はTLSを使っている。SSLは過去の遺産。
SSL/TLSはともにトランスポート層のプロトコルで、トランスポート層以上のアプリケーション層のプロトコルを暗号化するために使われる。
![]() |
| 図 SSL/TLS |
Webの暗号化にも使われている。
パケットのなかで暗号化されるのは、HTTPの部分(アプリケーション層)だけ。
[おさらい]共通鍵暗号方式
秘密鍵暗号方式とも呼ばれる。古の時代から現在まで使われる暗号方式。
暗号化、復号に同じ鍵を使う。鍵を安全に共有する点が最重要ポイント。
![]() |
| 図 [おさらい]共有鍵暗号方式 |
[おさらい]公開鍵暗号方式
鍵は1つではなく、2つ。
暗号化と復号で異なる鍵を使う。
共通鍵暗号方式と異なり、鍵の共有は不要だが、暗号化、復号処理が共通鍵に比べると遅くなる。
![]() |
| 図 [おさらい]公開鍵暗号方式 |
TLSで暗号化通信をするまで
TLSはTCPを使っているため、まず、TCPのコネクション確立を行う。
そのあと、TLSハンドシェイクを行う。
TLSハンドシェイクでは、暗号化方式を決定し、暗号化通信で利用する共通鍵を共有する。
![]() |
| 図 TLSで暗号化通信をするまで |
[TLSハンドシェイク]①Client Hello、②Server Hello
Client Helloでクライアントからサーバーに
- クライアントランダム <= 共通鍵生成時に利用
- 可能な暗号化方式一覧
等を送信。
Client Helloを受信したサーバーは、Server Helloで
- サーバーランダム <= 共通鍵生成時に利用
- 暗号化方式
サーバーはクライアントにサーバー証明書を送信。
サーバー証明書にはサーバーの公開鍵を含む。
![]() |
| 図 ③Server Certificate |
[TLSハンドシェイク]④Client Key Exchange
クライアントは共通鍵の素になるプリマスタシークレットを生成。
生成したプリマスタシークレットを③Server Certifaicateを受信したサーバーの公開鍵で暗号化。
暗号化されたプリマスタシークレットをサーバーへ送信。
このとき、盗聴されても復号できるのは、サーバーがこっそり持っている秘密鍵のみ。
盗聴されてもすごくマズいわけではない。
![]() |
| 図 ④Client Key Exchange |
サーバーは暗号化されたプリマスタシークレットを受信すると、自分の秘密鍵で復号。
=> クライアントとサーバーでプリマスタシークレットが共有できた
クライアント、サーバーはともに
- クライアントランダム
- サーバーランダム
- プリマスタシークレット
を使って、マスタシークレットを生成。
生成したマスタシークレットから、共通鍵を生成する。
このあとは生成した共通鍵を使って、共通鍵暗号方式で暗号化。
サーバー証明書
アクセスしたサイトが本物のサイトかどうかを確認するために使われる。
サーバー証明書自体は別人が身分を詐称して作成することができる。
よって、誰かが「確かに本人のサイトだ」と証明することが必要。
そこで、サーバー証明書を認証局が証明している。
![]() |
| 図 認証局がサーバー証明書を証明して正当性を保証する |
認証局がサーバー証明書を認証する
認証局はサーバーから証明の依頼を受けると、サーバー証明書のハッシュ値を認証局の秘密鍵で暗号化 <= 認証局の公開鍵のみ復号できる
=> これがサーバー証明書の署名
サーバーはクライアントにサーバー証明書+署名を送信。
クライアントは認証局の公開鍵で署名を復号
=> 復号できることで、確かに認証局が署名したことがわかる
=> 認証局が署名した = 認証局が正しいサーバーだと証明した
=> クライアントは正しいサーバーだとわかる
![]() |
| 図 クライアントはサーバー証明書の署名からサーバーの正当性を確認 |
練習問題
問1
サーバー証明書だけでなく、クライアント証明書もある。
身近なところでは、マイナンバーカード。
=> 中に証明書が入っている
![]() |
| 図 クライアント証明書もある |
次回は
SSL/TLSの紙のテストをします。









