レッスン 1-4
TLS 1.3 の中身
鍵の
TLS が
なぜ通るのか
社内の
この
TLS が守る 3 つ
TLS 1.3 の
| 性質 | 意味 |
|---|---|
| 認証 | サーバーの |
| 機密性 | 確立した |
| 完全性 | 途中で |
仕様は、
どの前提が崩れると破られるか
暗号化と
相手が
- 証明書が、
信じている CA (証明書を 発行する 機関 ) から 順に たどれるか - 証明書に
書かれた 名前が、 つなぎに 行った 名前と合うか
名前の
守らない 3 つ
正しく
| 守らない物 | 理由 |
|---|---|
| データの長さ | RFC 8446 は |
| 0-RTT のデータ | 再送されない |
| 届いた | 両端では |
0-RTT は、
脆いコードと直したコード
ラボの
確かめを切るか、自分の CA で確かめるか
def fetch(url, ca=None):ctx = ssl.create_default_context()ctx.check_hostname = Falsectx.verify_mode = ssl.CERT_NONEwith urlopen(url, context=ctx) as r:return r.read()def fetch(url, ca):ctx = ssl.create_default_context(cafile=ca)with urlopen(url, context=ctx) as r:return r.read()脆い方は、ca には
名前の確かめだけを切る
def fetch(url, ca):ctx = ssl.create_default_context(cafile=ca)ctx.check_hostname = Falsewith urlopen(url, context=ctx) as r:return r.read()def fetch(url, ca):ctx = ssl.create_default_context(cafile=ca)with urlopen(url, context=ctx) as r:return r.read()同じ
ログでの見え方と検知
直した方が
ssl.SSLCertVerificationError:[SSL: CERTIFICATE_VERIFY_FAILED]certificate verify failed:self-signed certificatecertificate verify failed:IP address mismatch,certificate is not validfor '127.0.0.1'.この
| 見る物 | な |
|---|---|
| コードの | CERT_NONE などは |
| 証明書の | 急に |
| 証明書の期限 | 切れると |
最後の
直し方と、直ったことの確かめ方
自分の
- 作業用の
フォルダで、 ラボの CA と、 その CA が 127.0.0.1 に 出した 証明書を 作る (SAN に 127.0.0.1 を 入れる。 新しい Python は 厳しく 確かめるので、 CA には CA である ことの 印、 サーバーの 証明書には 発行者の 鍵の 印も 付ける) - 関係の
無い 証明書と、 同じ CA が 別の 名前に 出した 証明書も 作り、 3 台の サーバーを 127.0.0.1 で動かす - 脆い
fetchが3 台すべてから 応答を 受け取る ことを 確かめる - 直した
コードに 置き換え、 本物だけに 通り、 残りの 2 台では 例外に なる ことを 確かめる - 下の
試験を 足し、 確かめを 切る コードに 戻すと 試験が 落ちる ことも 確かめる - 終わったら、
サーバーを 止め、 鍵と 証明書を 作業用の フォルダごと消す
def test_trusted_server(real, ca):assert fetch(real, ca) == b"hello" def test_unrelated_cert(fake, ca):with pytest.raises(URLError):fetch(fake, ca) def test_wrong_name(other, ca):with pytest.raises(URLError):fetch(other, ca)試験は
あわせて、
関わる事例
Equifax では、
TLS に
暗号化された
確認クイズ
1 問目
開発中に、
- ア
確かめを 切る 設定にして、 本番の 前に戻す - イ エラーの
理由を 調べ、 信じる CA か 証明書の 名前を 正しく直す - ウ HTTPS を
やめて HTTP にする
答えと理由を見る
答え イ
確かめを
2 問目
TLS 1.3 で
- ア 途中での
書き換え - イ 送った
データの長さ - ウ サーバーが
本物であること
答えと理由を見る
答え イ
RFC 8446 は、
説明課題
次の
- TLS が
守る 物と 守らない 物を、 3 つずつ
模範解答を見る
TLS が
一次資料
どれも
- RFC 8446 The Transport Layer Security (TLS) Protocol Version 1.3 (IETF、英語)。
守る 3 つの 性質、 長さを 隠さない こと、 前方 秘匿性、 0-RTT の データに 再送されない 保証と 前方 秘匿性が 無いこと - RFC 9525 Service Identity in TLS (IETF、英語)。
サーバーの 名前は SAN だけで 表し、 共通名の 欄は 使わないこと - TLS暗号設定ガイドライン 安全な
ウェブサイトの 。ために (暗号設定対策編) (IPA、 日本語) 3 つの 設定基準、 推奨セキュリティ型を 勧める こと、 チェックリスト - The Equifax Data Breach, Majority Staff Report (米下院 監視・
政府改革委員会、 。英語、 2018年12月) Apache Struts の 脆弱性の 公開が 2017年3月7日だった こと、 検査の 装置の 証明書が 2016年1月31日に 失効し19か 月検査できていなかった こと、 更新した 直後に 不審な 通信に 気づいたこと
次へ
次の