HTTPS
はじめに
こんにちは。KMC7回生のcosです。今年度分の部費はすでに払っているのでまだ現役です。
この記事はKMCアドベントカレンダー2013の18日目の記事で、 昨日は2回生のtyage君による 定番SSHクライアント「Google Chrome」 についてでした。KMCにはSSHが趣味な部員たちが多いようで、昨日まではSSHネタが多かったので別な話をしたいと思います。というわけで、今日はTLS/SSLとHTTPSについて書きます。
HTTPSが必要な理由
多くのページHTTP通信を使用していますが、重要情報を扱うGmailとかamazonとかネットバンクは安全性のためにHTTPSを使用しています。HTTP + Digest(Basic)認証を使えばアクセスはできなくなりますが、通信を盗聴したり中間者攻撃ができてしまいます。
そこでSSLを使って盗聴・中間者攻撃を防げるようにしたのがHTTPSです。
HTTPSで保障されていること
HTTPS(というかSSL)を使うと以下の2点が保障されます。
- 通信を暗号化することにより、クライアントとサーバ間の通信の盗聴を防ぐ
- PKIを使った認証を行うことにより、中間者攻撃(なりすまし)を防ぐ
それ以外のことは保障されてないので、アクセス制限をしたい場合は別途Basic認証などが必要となります。
通信の暗号化は共通鍵暗号を用いて行い、鍵自体の交換はRSA暗号*1とかでやるので安全、と思いきや鍵の交換からなりすましが行われていた場合、RSA暗号を用いていたとしても中間者攻撃が成立してしまいます。
中間者攻撃という最強の攻撃を防ぐためにPKI*2を用いる必要があります。これは簡単に言うとWindowsとかのインストール時にルートサーバの鍵*3を埋め込んでルートサーバから順々に子サーバ、孫サーバの正当性を検証しつつ鍵を交換していく仕組みです。ルートサーバの鍵が安全に手に入るため、子サーバ・孫サーバの鍵も安全に手に入り中間者攻撃を防げます。
HTTPSを過信すると
以下の様なことが起きます。
- サイト全体(https://example.com/)をHTTPS+Basic認証にして外部から見れなくしたと思ったらユーザーページ(https://example.com/~cos/とか)が丸見えだった。
- サイト全体(https://example.com/)をHTTPS+Basic認証にしたらGitWeb(https://example.com/GitWeb/)が丸見えだった。
- サイト全体がhttpsでhttpとか使ってないから、Cookieのsecure属性とか付けなくてもいいと思ったらhttp://example.com:443/にアクセスが来ていた。
- HTTPSだから盗聴・改竄は無理なのでサーバの入力バリデーションをてきとうに作ったら、クライアント自身が改竄したデータを送ってきた。
- 認証機能をてきとうに作ったらオレオレ証明書を信用してた。
- 政府のページを使用するのになぜかルートCAを入れる必要がある。
- クライアントもサーバも問題無いと思ったら認証局がハックされてた。
おわりに
時間が無かったので図もない手抜きの記事になってしまいました。特にPKI周りは端折りすぎな気がします。さて、明日はhidesys君がRails4の新機能について書くそうです。お楽しみに。
KEEP YOUR DIGNITY