概要
- Basic認証のパスワードはHTTPで送信時に暗号化されていないらしい。情報を簡単にまとめておく。
情報
-
Apacheのドキュメントに下記のような記載があった。(https://httpd.apache.org/docs/2.4/howto/auth.html)
Basic 認証はクライアントからサーバへ、 パスワードを暗号化せずに送ります。
-
ようはBasic認証の認証情報は「見ようと思えば簡単に見れちゃう」ということになる。
-
ただし、Apacheの場合mod_sslというモジュールを併用することでSSL/TLSプロトコルを使った暗号化をする事ができる。そもそもHTTPSを使うことでも暗号化することができる。
-
Basic認証単独で使った場合の欠点を補うべく生まれたのがDigest認証である。ApacheでDigest認証を実装する場合、Basic認証と左程変わらない手順で実装できるのでこちらの方がおすすめである。
-
Digest認証の流れはこちらが分かりやすかった→Digest認証とは
- クライアントがランダム文字列をサーバーに要求
- サーバーがランダム文字列をクライアントに返す
- 人間がクライアント側で認証情報を入力
- クライアント側が入力された認証情報とランダム文字列を連結
- 認証情報+ランダム文字列をハッシュ化する
- ハッシュ化された文字列をサーバーに送る
- クライアントからきた文字列とサーバー側で用意した「認証情報+ランダム文字列をハッシュ化した文字列」を照らし合わせる
- 一致したら認証成功
-
ただDigest認証のハッシュは解析する事ができる古いアルゴリズムらしいので完璧じゃない。
まとめ
HTTP | HTTPS | |
---|---|---|
Basic認証 | ✕ | ◯ |
Digest認証 | △ | ◯ |
- Basic認証をHTTPで使うと簡単に認証情報を見れてしまうので危険
- Digest認証をHTTPで使うと一応セキュアではあるが解析される可能性有り
HTTPSを使えるならそっちで今まで通りBasic認証でHTTPSで暗号化の方がいい気がする。(所感)