概要
Java 2 Platform, Standard Edition のバージョン 1.4 までは、Java Plug-in はブラウザ固有のネイティブ API を介して HTTPS をサポートしていました。JavaTM Secure Socket Extension (JSSE) は、1.4 で新たに導入された Java 拡張機能であり、Java プラットフォーム用 SSL および HTTPS の Java 実装を提供します。1.4 では、Java Plug-in はブラウザに依存するのではなく、JSSE を利用して HTTPS サポートを提供します。
これには、ブラウザ固有のネイティブ API を使用する場合に比べて、次の利点があります。
ネイティブコードを使用しないため、各プラットフォームのブラウザごとに個別の HTTPS をサポートする必要はありません。このため、コードの保守および移植が簡単です。
java.net.HttpsURLConnection の実装が JSSE で提供されるため、開発者は、トンネリングを含む HTTPS の全機能を利用できます。
サポートがマルチスレッド対応です。Java の内部に実装が存在するため、相互排他ロック (mutex) を使用して接続をロックする必要がなく、このため、同時 HTTPS 接続における Java のパフォーマンスが向上します。
Java Plug-in は、Win32、Linux、および Solaris オペレーティング環境で、JSSE を介した HTTPS をサポートします。
プロキシおよび cookie のサポート
HTTPS 接続ごとに異なるプロキシ設定を使用できます。Java Plug-in は、HTTPS でのプロキシ設定をフルサポートします。プロキシ設定は、ブラウザのユーザ環境設定、および Java Plug-in コントロールパネルで設定できます。直接、手動、および自動のプロキシ設定がサポートされます。
すべての HTTPS 接続で、cookie の送受信が可能です。Java Plug-in は cookie をフルサポートするため、ブラウザの cookie ストアを使用して cookie を自動的に取得および更新できます。
エラー処理のサポート
HTTPS サーバへのアクセス時にエラーが発生する場合があります。Java Plug-in は JSSE 内でフックを実行して、次の種類のエラー処理を行います。
ホスト名の不一致: HTTPS サーバのホスト名がサーバ証明書の名前と一致していない場合、警告ダイアログが表示されます。
信頼されないサーバ証明書: SSL ハンドシェイクの実行時にサーバ証明書を検証できない場合、警告ダイアログが表示されます。
信頼されないクライアント証明書: サーバがクライアント認証を必要とするが、クライアント証明書を検証できない場合、警告ダイアログが表示されます。
サーバ認証: クライアントが HTTPS サーバ上の保護されたディレクトリにアクセスすると、ユーザ名とパスワードの入力がユーザに求められます。注: 現時点で、基本認証およびダイジェスト認証のみがサポートされています。
JSSE を使用した HTTPS の潜在的な問題点
JSSE を使用した HTTPS のサポートにより、ブラウザ固有の問題の多くを回避できますが、開発者が注意する必要のあるいくつかの問題点が存在します。
信頼されないサーバ証明書: HTTPS 接続の確立時に SSL ハンドシェークが実行されると、J2SE に格納されているルート CA に対してサーバ証明書が検証されます。ただし、J2SE がサポートするルート CA 証明書の数は、ブラウザがサポートするルート CA 証明書の数よりも少なくなります。 このため、信頼されないサーバ証明書の問題が発生する場合があります。
クライアント認証: HTTPS サーバがクライアント認証を必要とする場合、ローカルのクライアント証明書が認証のためサーバに送信されます。JSSE では、クライアント認証は、別個のファイルに格納され、ブラウザから独立しています。クライアント証明書を機能させるため、開発者は keytool を使用してクライアント証明書を JSSE 内にインポートする必要があります。詳細は、http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/jsse/JSSERefGuide.html の JSSE オンラインマニュアルを参照してください。
エラー処理のレベル: 現在、Java Plug-in は前の節に示した種類のエラーを処理できます。ただし、Java Plug-in が認識しない、ほかの種類のエラーが存在する場合、Java アプレットコードがブレークする可能性があります。
起動時の遅延: HTTPS を使用する際、安全なランダムジェネレータが作成されます。この処理には、数秒から 1 分かかります (クライアントマシンの速度に応じて異なります)。安全なランダムジェネレータの作成時に、Java Plug-in がハングしたように見える場合があります。この問題は、Java Plug-in への HTTPS コードのロードを遅らせること、およびプラットフォームで利用可能な場合にはネイティブ OS の安全なシードジェネレータを利用することで解決されています。このため、HTTPS を使用しない場合でも、Java Plug-in の起動時間は変化しません。ただし、Java Plug-in の起動コードをロードする順序によっては、起動時の遅れが見られる場合もあります。