セキュリティ
|
|
サーブレットにおけるセキュリティとは
セキュリティとは、インターネットの如きオープンなネットワークを利用するアプリケーションにおいて、その安全性を図るものであり、以下の機能が必要とされる。
- 認証: 通信エンティティ同士が、互いに特定のエンティティに代って動作していることを証明するためのメカニズム
- アクセス制御: 取得性、保全性、または秘匿性の適用実施のために、ユーザやプログラムの集まりに対して、リソースのへの関与を制限するためのメカニズム
- データ保全性: その情報が通過する間に、第3者によって傍変更されていないことのメカニズム
- 機密性またはデータのプライバシー: その情報をアクセスするために、オーソライズされたユーザに対してのみ取得可能であり、伝送の際不信をまねくものとなっていないことを確たるものにするメカニズム
サーブレットにおけるセキュリティは、サーブレット仕様書(2.2版)の第11章に記されている。いささかかたぐるしい文章で読みにくいかもしれないが、簡潔にまとめてある。一読すればわかるように、基本的にはセキュリティは下位層でなされる。代表的なのはソケット層(TCPとのインターフェイス層)で使われるSSL(Secure Socket Layer)であり、これを使ったHTTPであるHTTPSである。これらの処理はアプリケーション毎の設定ファイルを参照してサーブレット・エンジンが対応することができる。これを「宣言型」のセキュリティという。従ってサーブレットがプログラムで取り扱うのは、より高度な処理をするために使われるいわゆる「プログラマティック」なセキュリティである。これにはHttpServletRequestインターフェイスにある以下の3つのメソッドが用意されている。
- GetRemoteUser(クライアント認証されてたユーザ名を返す)
- IsUserInRole(そのユーザがそのセキュリティ・ロールのなかに居るか否か)
- GetUserPrincipal(そのユーザのPrincipalオブジェクトの取得)
ここではまず宣言型セキュリティから実習することにするが、その前にセキュリティに関する基礎的な用語を幾つか説明する。(サーブレット2.2版仕様書の第2章およびSunの用語集http://java.sun.com/j2ee/ja/glossary.htmlなどを参照した。)
セキュリティ・ポリシー・ドメイン(security policy domain)
そこでもってセキュリティー・ポリシーが定義され、セキュリティ・サービスの管理者が実施する適用範囲。しばしばレルムとも呼ばれる。
プリンシパル(principal)
ある認証プロトコルで認証されるユーザの実体。プリンシパルはプリンシパル名で識別され、認証データを用いて認証される。
レルム(realm)
セキュリティ・ポリシー・ドメインを参照のこと。保護空間を定義する文字列で、基本認証の際HTTP要求の一部として渡される。サーバ上の保護された資源は幾つかの保護空間に区分され、各々の区分はそれぞれ認証のスキームあるいは/または認証データベースを持つ。
ロール(role)
アプリケーションアセンブラが、複数のユーザを対象として定義する抽象的な論理グループ。定義されたロールは、アプリケーションの配備時に運用環境でプリンシパルやグループなどのセキュリティアイデンティティにマップされる。
ロール、プリンシパル、レルムの関係を下図のように理解しておけばよい。
さて認証にはつぎの4つのメカニズムを使うことができる。
HTTP基本認証 |
HTTPの基本認証手順を使うもので、ブラウザはサーバからの要求に基づきポップアップ・ウィンドウでユーザ名とパスワードをユーザに求める。 |
HTTPダイジェスト認証 |
基本認証がパスワードをbase64でエンコードしているのに対し、より安全な暗号化を使うが、広く使われてはいない。 |
HTTPSクライアント認証 |
SSL上のHTTPを使った強力な認証メカニズムで、ビジネス用に有用。ユーザはPKC(公開鍵認定)を持つことが必要。 |
フォーム・ベース認証 |
ブラウザ組込みのログインウィンドウでは見た目や感じ(ルック・アンド・フィール)が制御できない。サーバ側でログイン・フォームを用意し、それのユーザ名とパスワードをユーザが埋める。 |
本章では、Tomcat(3.x)エンジンを使って、フォーム・ベース認証とその設定を、まず実際に体験しながらセキュリティに関する基礎を学ぶことにする。