Webセキュリティ入門:HTTP・Cookie・脆弱性
HTTPS(TLS)が守るもの・守らないもの
この回でやること
HTTPS(TLS)の暗号化が守るものと、守らないものをはっきり分けます。通信を暗号化しても入力の改ざんは防げません。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
HTTPS は、HTTP を TLS で包んで経路の上を守る仕組みです。錠前の印が何を保証しているのかを、守るものと守らないものに分けて確かめます。
読み終えるころには、HTTPS だから安全、という言い方の何が足りないかを説明できます。
3つのことを守る
HTTPS は HTTP を TLS で包んだものです。守るのは次の3つです。
- 盗み見られない。途中の経路で中身を読まれない
- 書き換えられない。途中で改ざんされたら気づける
- 相手が本物である。証明書で接続先を確かめる
3つ目が抜けがちです。暗号化だけでは、暗号化された偽物につながる可能性が残ります。証明書の確認まで含めて初めて成立します。
守らないもの
ここが今回の要です。HTTPS は経路を守るのであって、両端は守りません。
- 届いた値が正しいかどうかは分からない
- 送ってきた相手が正当な利用者かは分からない
- サーバー側に保存したあとの安全は別の話
- ブラウザ側に置いた値が読まれないわけではない
攻撃者も HTTPS で接続します。暗号化された通路を通って、想定外の値がきれいに届くだけです。届いたあとの確認は、まったく別に必要です。
混ざると弱くなる
HTTPS のページの中に、HTTP で読み込む部品がひとつでもあると、そこが弱点になります。ブラウザは多くの場合これを止めますが、設計として混ぜないことが先です。
外部から読み込むスクリプトも同じ考え方で見ます。暗号化されていても、読み込んだ先が信用できるかは別問題です。読み込んだスクリプトは、自分のページと同じ権限で動きます。
証明書と、常に暗号化させる指定
証明書には有効期限があります。切れると接続できなくなるので、更新を自動にしておきます。期限切れは可用性の事故として扱います。
もうひとつ、Strict-Transport-Security という返答ヘッダーがあります。これを付けると、ブラウザは以降そのホストへ HTTPS でしか接続しなくなります。 利用者が http と打っても、暗号化されないまま出ていきません。
最初の1回だけは平文で接続する余地が残るため、ブラウザに事前登録する仕組みも用意されています。ここまでやると、経路の入口が塞がります。