暗号技術の基礎と応用
TLSの証明書の検証では、署名のチェーンと有効期間を確かめるだけでなく、接続しようとしたホスト名が証明書のSAN(サブジェクト代替名)に含まれるかも確かめる。この確認が欠かせない理由として、正しいものはどれか。
- A攻撃者も、自分が持つ別のドメイン名については、信頼される認証局から正規の証明書を取得できるから
- Bホスト名を確かめないと、通信の暗号化そのものが行われなくなるから
- Cホスト名が一致しない証明書は、署名のチェーンが必ず途中で切れているので、そもそも検証に通らないから
答えと解説を見る
正解:A. 攻撃者も、自分が持つ別のドメイン名については、信頼される認証局から正規の証明書を取得できるから
証明書の署名が正しく期限内でも、それが「どのドメイン名のための証明書か」を確かめなければ意味がありません。攻撃者は、自分の持つドメイン名については、そのドメインを管理していることを示すだけで正規の証明書を取得できます。そのため、ホスト名を確かめないクライアントは、その証明書を出す偽のサーバを本物と見なしてしまいます。独自にTLSを使うプログラムで、ホスト名の検証を無効にしたまま使う誤りは、よく知られた脆弱性の原因です。
- A. 正しい。チェーンが正しいことと、接続先のための証明書であることは、別々に確かめる必要があります。
- B. ホスト名を確かめなくても暗号化は行われます。ただし、相手が偽物でも気付けず、その偽物との間で暗号化することになります。
- C. 攻撃者が取得した正規の証明書は、チェーンも正しくたどれます。だからこそ、ホスト名の確認が必要です。