ASP.NET MVC のコントローラにて SSL 接続を要求する方法
SSL というのはひと言で言うと、暗号化接続を行う仕組みです。
通常、ウェブサイトは HTTP というプロトコルを用いて、ウェブサーバーとクライアント(つまりブラウザ)の間で、 必要な文書やデータのやり取りを行います。
プロトコルレイヤーで考えたときに、SSL は TCP と HTTP の間に挟まる形で、HTTP に暗号化機能を追加するような形になってます。
HTTP がセキュア (Secure, 安全) になった、ということで、HTTP over SSL (SSL の上にのった HTTP) を、HTTP に S をくっつけて、 HTTPS など呼んだりします。
基本的に HTTP はデータをそのまま送信します。
データはインターネット上をドンブラコ、ドンブラコと流れていきますが、データの中継を行うネットワーク機器上では、 今どんなデータが流れているか、丸見えです。
つまり、データはそのまま読めてしまいますから、 "username=suzuki&password=mypassword" などというデータが見えていたら、これは危ないわけです。
特に、こうしたパスワードとアカウント情報(まとめてクレデンシャルなどといいます)を送る場合や、 クレジットカード番号を入力する必要がある場合などは、通信を暗号化して第三者がデータを覗き見できないようにするべきです。
こうした場合に現在、広く用いられているのが SSL 通信 (HTTPS) です。
ここでは、ASP.NET MVC の仕組みでウェブサイトを構築しているときに、簡単に SSL を必要とするよう設定する方法を示します。
SSL 接続の要求 - RequireHttps
結論から言えば、MVC の仕組みで SSL を要求するのは大変簡単です。
コントローラのアクションメソッドの属性として、RequireHttps を設定すれば OK です。
次の例をみてください。
ここでは EmployeeController の Index メソッドに RequireHttps を設定しています。
こうすることによって、http://www.example.com/Employee/Index/ としたときに、SSL 通信へとリダイレクトされます。
(Index がデフォルトのメソッドに設定されていれば、http://www.example.com/Employee/ への要求と同等)
次のログを見て分かるように、自動的に HTTP ステータスコード 302 "Found" を返し、 HTTP ヘッダーの Location にて https://... へとクライアントを誘導しています。
アプリケーションの開発側としては、サーバーの設定をするより、ずっと簡単にリダイレクトできていいですね。