Java EE 7実行環境におけるSSL/TLSのサポート範囲は以下のとおりです。
項目 | サポート範囲 | ||
---|---|---|---|
証明書のニックネーム | JDKのkeytoolコマンドで指定可能な文字列 | ||
プロトコルバージョン | TLS1.0 TLS1.1 TLS1.2 | ||
暗号化方式 | 使用するJDKがサポートする暗号化方式 | ||
クライアント認証 | 以下から選択可能
| ||
証明書 | 認証局が署名したサーバ(クライアント)証明書 | 鍵生成アルゴリズム | RSA、EC、DSAなど、JDKのkeytoolで指定可能な鍵生成アルゴリズム |
鍵長 | 鍵生成アルゴリズムに対応した鍵長 RSAの場合は2048bit以上を推奨 | ||
署名アルゴリズム | SHA-2の署名アルゴリズム RSAの場合は、SHA256withRSAやSHA384withRSA等を推奨 | ||
自己署名証明書 | 鍵生成アルゴリズム | RSA、EC、DSAなど、JDKのkeytoolで指定可能な鍵生成アルゴリズム | |
鍵長 | 鍵生成アルゴリズムに対応した鍵長 RSAの場合は2048bit以上を推奨 | ||
署名アルゴリズム | SHA-2の署名アルゴリズム RSAの場合は、SHA256withRSAやSHA384withRSA等を推奨 |
証明書のニックネーム
Java EE 7実行環境で使用する証明書を対応するキーストアの別名で指定します。「サーバ(クライアント)証明書の設定」に従ってキーストアにサーバ証明書を設定する場合、keytool -genkeypairの-aliasに指定した別名を本定義に設定してください。設定の詳細についてはネットワーク設定の定義項目「証明書のニックネーム」を参照してください。
プロトコルバージョン
SSL/TLSのプロトコルバージョンの有効/無効を設定により変更可能です。設定の詳細については、ネットワーク設定の定義項目「TLS1.0有効化」、「TLS1.1有効化」、「TLS1.2有効化」を参照してください。
暗号化方式
SSLのサーバ、クライアント間でコネクション確立時に選択される暗号化方式のリストを設定します。設定の詳細については、ネットワーク設定の定義項目「暗号化方式群」を参照してください。
クライアント認証
クライアント認証では、SSLのサーバがクライアントから送信された証明書を使って、クライアントの本人確認を行います。
動作の詳細については、ネットワーク設定の定義項目「クライアント認証」を参照してください。
証明書はデジタル署名された公開鍵で、ペアの秘密鍵を持っています。SSLでは以下の証明書を使用します。
サーバ(クライアント)証明書
サーバ(クライアント)が作成し、認証局によって署名された公開鍵
ルート認証局が作成し、ルート認証局自身によって署名された公開鍵(ルート証明書)または、
配下の中間認証局が作成し、上位の認証局によって署名された公開鍵(中間認証局証明書)
サーバ(クライアント)が作成し、サーバ(クライアント)自身によって署名された公開鍵
証明書は、マスターパスワードで保護されたキーストア/トラストストアに登録します。マスターパスワードの詳細は「5.2.8 マスターパスワード」を参照してください。
キーストア/トラストストアはJDKのkeytoolコマンドで操作します。キーストア/トラストストア内の証明書は別名により一意に識別されます。keytoolコマンド、別名の詳細は、JDKの情報を参照してください。キーストア/トラストストアに格納する証明書は、それぞれ以下のとおりです。
キーストア
ルート認証局または中間認証局によって署名された、サーバ(クライアント)証明書
サーバ(クライアント)証明書に対応する秘密鍵
ルート認証局の証明書
中間認証局の証明書(必要な場合)
トラストストア
サーバ(クライアント)が信頼するルート認証局の証明書
サーバ(クライアント)が信頼する中間認証局の証明書(必要な場合)
キーストア
自己署名証明書
自己署名証明書に対応する秘密鍵
トラストストア
自己署名証明書
ポイント
サーバ(クライアント)は、キーストア内の認証局証明書とサーバ(クライアント)証明書を通信相手に送信します。
サーバ(クライアント)は、通信相手から受信した証明書とトラストストア内の証明書を比較することで証明書の正当性を検証します。
キーストアファイルとトラストストアファイルは、以下に格納されます。
キーストアファイル:[Java EE 7共通ディレクトリ]\domains\domain1\config\keystore.jks |
キーストアファイル:[Java EE 7共通ディレクトリ]/domains/domain1/config/keystore.jks |
注意
キーストア/トラストストアの内容を追加・更新・削除する場合、事前にバックアップを作成してください。
キーストアファイルとトラストストアファイルは、Interstage Java EE 7 DASサービスと全てのIJServerクラスタ間で同期化されます。このため、証明書の設定はInterstage Java EE 7 DASサービスのキーストア/トラストストアに対して行ってください。
キーストア/トラストストアの内容をkeytoolコマンドで追加・更新・削除した場合は、Interstage Java EE 7 DASサービスとIJServerクラスタの再起動が必要です。
キーストアファイルとトラストストアファイルに対し、運用方針に従ってセキュリティ権限を設定してください。
keytoolコマンド実行時、キーストア/トラストストアのパスワードにはマスターパスワードを指定してください。
キーストア/トラストストアのパスワードをkeytoolコマンドで変更しないでください。
keytoolコマンドで鍵ペアを作成する時、秘密鍵のパスワードにはマスターパスワードと同じものを指定してください。
インストール時にキーストア/トラストストアに登録されている別名(s1as/glassfish-instance)の証明書は実際の運用では使用しないでください。
本製品では以下の通信をSSLで行うことができます。各通信でSSLを使用するための設定について説明します。
WebブラウザとWebサーバ間の通信
設定方法については、「Interstage HTTP Server 2.2 運用ガイド」を参照してください。
WebブラウザとWebコンテナ間の通信
WebコンテナがHTTPSリスナーでSSL通信を行う場合は以下の設定を行ってください。
「サーバ(クライアント)証明書の設定」の手順に従ってサーバ証明書を設定してください。
SSLのクライアント認証を行う場合は「信頼する認証局証明書の設定」の手順に従って設定してください。
HTTPSリスナーのSSLの定義項目を設定します。設定対象の定義項目については、「Java EE 7実行環境の設定」を参照してください。
信頼する認証局の証明書がWebブラウザに登録されていない場合は、認証局からルート証明書と必要に応じて中間認証局証明書を入手し、登録してください。
WebアプリケーションがSSLクライアントとなっての通信
WebアプリケーションがSSLクライアントとなって通信する場合は、アプリケーションの実装方法によって必要な対応が異なります。
Java EE 7のトラストストアに必要な証明書を設定することにより、WebアプリケーションがSSLクライアントとなって通信することができます。「信頼する認証局証明書の設定」の手順に従って、トラストストアに認証局証明書の設定してください。
また、クライアント認証が必要な場合、以下の手順でキーストアに証明書の設定してください。
「サーバ(クライアント)証明書の設定」に従って、キーストアにクライアント証明書とルート証明書、必要に応じて中間認証局証明書を設定してください。
Interstage Java EE 7 DASサービスが起動していない場合、Interstage Java EE 7 DASサービスを起動します。
asadmin list-jvm-optionサブコマンドを実行し、IJServerクラスタに設定されているJava VMオプションに「-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=クライアント証明書の別名」が含まれているかを確認します。クライアント証明書の別名の初期値はs1asです。
例
IJServer001のJava VMオプションを確認する場合、以下のコマンドを実行します。
C:\Interstage\F3FMisje7\glassfish\bin\asadmin list-jvm-options --target IJServer001 |
/opt/FJSVisje7/glassfish/bin/asadmin list-jvm-options --target IJServer001 |
コマンドの実行結果に以下が表示されていることを確認します。
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as |
asadmin list-jvm-optionsサブコマンドで表示されたJava VMオプションの「-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=クライアント証明書の別名」を削除します。
例
IJServer001のJava VMオプションを削除する場合、以下のコマンドを実行します。
C:\Interstage\F3FMisje7\glassfish\bin\asadmin delete-jvm-options --target IJServer001 \-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as |
/opt/FJSVisje7/glassfish/bin/asadmin delete-jvm-options --target IJServer001 \\-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as |
Java VMオプションに「-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=クライアント証明書の別名」を追加します。
例
キーストアに別名「mycert」でクライアント証明書を設定した場合、以下のコマンドを実行します。
C:\Interstage\F3FMisje7\glassfish\bin\asadmin create-jvm-options --target IJServer001 \-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=mycert |
/opt/FJSVisje7/glassfish/bin/asadmin create-jvm-options --target IJServer001 \\-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=mycert |
Java VMオプションの変更時に--targetに指定したInterstage Java EE 7 DASサービスまたはIJServerクラスタを再起動します。
Java EE 7のキーストア・トラストストアを使用せず、アプリケーションで独自にキーストア・トラストストアを準備し、Webアプリケーション内でjava.security.KeyStoreのload等のAPIを使用してキーストア・トラストストアを参照することができます。詳細は、JDKのドキュメントを参照してください。
注意
Interstage Java EE 7 DASサービスやIJServerクラスタに設定されている以下のJava VMオプションを変更しないでください。変更したり削除したりすると、IJServerクラスタの起動や起動後の操作に失敗する可能性があります。
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
アプリケーションで独自に準備したキーストア・トラストストアのファイルは、バックアップコマンドによるバックアップの対象となりません。手動でバックアップしてください。
WebアプリケーションがSSLサーバとなっての通信
WebアプリケーションがSSLサーバとなって通信する場合は、WebコンテナがHTTPSリスナーでSSL通信を行う場合と同様に、キーストア・トラストストアの設定をします。Webコンテナ側の設定を参照してください。
WebサービスクライアントとWebサービス間の通信
WebサービスでSSLを利用するには、WebサーバまたはWebコンテナでSSLを有効にしてください。
WebサーバでSSLを有効にする場合
WebサーバでSSLを有効にする場合は、「WebブラウザとWebサーバ間の通信」に従ってください。
WebコンテナでSSLを有効にする場合
WebコンテナでSSLを有効にする場合は、「Webコンテナ側の設定」に従ってください。
Webサービスクライアントを実行するアプリケーションクライアントコンテナに対して、キーストアファイルとトラストストアファイルの設定、およびJava VMオプションの設定を以下の手順で行ってください。
JDKのkeytoolコマンドでキーストア/トラストストアを作成します。
トラストストアに信頼する認証局の証明書を登録します。
クライアント認証を使用する場合は、キーストアにクライアント証明書と信頼する認証局の証明書を登録します。
VMARGS環境変数に、以下を設定してください。
クライアント認証を使用しない場合
set VMARGS=-Djavax.net.ssl.trustStore=トラストストアファイル名 -Djavax.net.ssl.trustStorePassword=トラストストアのパスワード |
VMARGS="-Djavax.net.ssl.trustStore=トラストストアファイル名 -Djavax.net.ssl.trustStorePassword=トラストストアのパスワード" |
クライアント認証を使用する場合
set VMARGS=-Djavax.net.ssl.trustStore=トラストストアファイル名 -Djavax.net.ssl.trustStorePassword=トラストストアのパスワード -Djavax.net.ssl.keyStore=キーストアファイル名 -Djavax.net.ssl.keyStorePassword=キーストアのパスワード -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=キーストアに登録したクライアント証明書の別名 |
VMARGS="-Djavax.net.ssl.trustStore=トラストストアファイル名 -Djavax.net.ssl.trustStorePassword=トラストストアのパスワード -Djavax.net.ssl.keyStore=キーストアファイル名 -Djavax.net.ssl.keyStorePassword=キーストアのパスワード -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=キーストアに登録したクライアント証明書の別名" |
JAX-RSクライアントとJAX-RSアプリケーション間の通信
JAX-RSアプリケーションでSSLを利用するには、WebサーバまたはWebコンテナでSSLを有効にしてください。
WebサーバでSSLを有効にする場合
WebサーバでSSLを有効にする場合は、「WebブラウザとWebサーバ間の通信」に従ってください。
WebコンテナでSSLを有効にする場合
WebコンテナでSSLを有効にする場合は、「Webコンテナ側の設定」に従ってください。
JAX-RSクライアントでSSLを利用する場合は、「WebサービスクライアントとWebサービス間の通信」の「Webサービスクライアント側の設定」と同様の方法で設定することができます。
クライアントがJAX-RSクライアントではなくWebブラウザやモバイル端末などのHTTPクライアントの場合は、使用するHTTPクライアントの仕様を確認して、信頼する証明書の登録などの必要な設定を行ってください。
サーバ(クライアント)証明書の設定
認証局が署名したサーバ(クライアント)証明書の取得とキーストアの設定を以下の手順で行います。証明書を新規に登録する場合だけでなく、証明書の有効期限切れなどに伴い証明書を更新する場合も、本手順を実行してください。
キーストアファイルをバックアップします。
キーストアに既に登録されている証明書を更新する際に既存の別名を使用する場合は、キーストアに登録されている該当の公開鍵と秘密鍵のペアを削除します。
例
別名newcertの場合の実行例
C:\Interstage\JDK8\bin\keytool -delete -alias newcert -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -delete -alias newcert -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
キーストアに任意の別名で新しい公開鍵と秘密鍵のペアを生成します。
また、以下のX.500識別名を指定します。指定する値はX.500識別名の仕様と認証局の手順に従ってください。
X.500識別名 | 意味 |
---|---|
CN(Common Name) | 姓名。サーバ証明書の場合FQDNまたはIPアドレス(注) |
OU(Organization Unit) | 組織単位(例:部署) |
O(Organization) | 組織(例:会社) |
L(Locality) | 都市または地域(例:市区町村) |
ST(State or Province) | 州または地方(例:都道府県) |
C(Country) | 国名コード(ISO3166) |
注)URLのFQDNまたはIPアドレスとCNが一致しない場合、SSL通信時のホスト名検証でエラーになります。
例
鍵生成アルゴリズムRSA、鍵長2048bit、署名アルゴリズムSHA256withRSA、別名newcert、有効期間365日の場合の実行例
C:\Interstage\JDK8\bin\keytool -genkeypair -alias newcert -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -dname "CN=example.jp, OU=Example Organization Unit, O=Example Organization, L=Example City, ST=Example Prefecture, C=JP" -validity 365 -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -genkeypair -alias newcert -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -dname "CN=example.jp, OU=Example Organization Unit, O=Example Organization, L=Example City, ST=Example Prefecture, C=JP" -validity 365 -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
秘密鍵のパスワードを指定します。キーストアのパスワードと同様にするため、[ENTER/RETURN]のみを入力してください。
<newcert>の鍵パスワードを入力してください (キーストアのパスワードと同じ場合はRETURNを押してください): [ENTER/RETURN] |
キーストアから証明書署名要求(CSR)を生成します。
例
別名newcert、証明書署名要求ファイル名newcert.csrの場合の実行例
C:\Interstage\JDK8\bin\keytool -certreq -alias newcert -file newcert.csr -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -certreq -alias newcert -file newcert.csr -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
認証局に証明書署名要求(CSR)を送信し、以下を取得します。
認証局によって署名された証明書
認証局のルート証明書
中間認証局証明書(必要な場合)
認証局のルート証明書をキーストアに登録します。
例
別名ca_root、証明書ファイル名ca_root.cerの場合の実行例
C:\Interstage\JDK8\bin\keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
必要に応じて中間認証局証明書を上位階層の証明書から順にキーストアに登録します。
例
別名ca_inter、証明書ファイル名ca_inter.cerの場合の実行例
C:\Interstage\JDK8\bin\keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
取得した証明書をキーストアに登録します。
例
別名newcert、証明書ファイル名mycert.cerの場合の実行例
C:\Interstage\JDK8\bin\keytool -importcert -alias newcert -file mycert.cer -trustcacerts -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -importcert -alias newcert -file mycert.cer -trustcacerts -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
Interstage Java EE 7 DASサービスのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリの同期化処理」を参照してください。
Interstage Java EE 7 DASサービスを再起動します。
IJServerクラスタを再起動します。
信頼する認証局証明書の設定
トラストストアファイルをバックアップします。
信頼する認証局のルート証明書をトラストストアに登録します。
例
別名ca_root、証明書ファイル名ca_root.cerの場合の実行例
C:\Interstage\JDK8\bin\keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\cacerts.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore /var/opt/FJSVisje7/domains/domain1/config/cacerts.jks |
必要に応じて中間認証局証明書を上位階層の証明書から順にトラストストアに登録します。
例
別名ca_inter、証明書ファイル名ca_inter.cerの場合の実行例
C:\Interstage\JDK8\bin\keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\cacerts.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore /var/opt/FJSVisje7/domains/domain1/config/cacerts.jks |
Interstage Java EE 7 DASサービスのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリの同期化処理」を参照してください。
Interstage Java EE 7 DASサービスを再起動します。
IJServerクラスタを再起動します。
別名s1as、glassfish-instance以外の自己署名証明書を使用する場合は、以下の手順で設定します。
「サーバ(クライアント)証明書の設定」の1.から4.までを行います。
キーストアから公開鍵をエクスポートします。
例
別名newcert、証明書ファイル名newcert.cerの場合の実行例
C:\Interstage\JDK8\bin\keytool -export -alias newcert -file newcert.cer -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -export -alias newcert -file newcert.cer -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
Interstage Java EE 7 DASサービスのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリの同期化処理」を参照してください。
Interstage Java EE 7 DASサービスを再起動します。
IJServerクラスタを再起動します。
エクスポートした公開鍵をクライアント側に登録します。
注意
自己署名証明書は通信相手に対して正当性を証明できないため、運用環境では使用しないでください。
証明書の有効期限が切れた場合や証明書が不要になった場合、以下の手順により証明書を削除します。
証明書の有効期限が切れた場合は、キーストアやトラストストアに格納されている証明書を削除し、必要に応じて「5.3.3.4 認証局が署名した証明書の設定」の手順を実施するようにしてください。
なお、証明書の有効期限が切れた場合、サーバーログにNCLS-SECURITY-05054のメッセージが出力されるようになります。
キーストアファイル、またはトラストストアファイルをバックアップします。
キーストアファイル、またはトラストストアファイルに格納されている証明書を削除します。
例
キーストアから別名newcertを削除する場合の実行例
C:\Interstage\JDK8\bin\keytool -delete -alias newcert -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\keystore.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -delete -alias newcert -keystore /var/opt/FJSVisje7/domains/domain1/config/keystore.jks |
トラストストアから別名gtecybertrust5caを削除する場合の実行例
C:\Interstage\JDK8\bin\keytool -delete -alias gtecybertrust5ca -keystore C:\Interstage\F3FMisje7\var\domains\domain1\config\cacerts.jks |
/opt/FJSVawjbk/jdk8/bin/keytool -delete -alias gtecybertrust5ca -keystore /var/opt/FJSVisje7/domains/domain1/config/cacerts.jks |
Interstage Java EE 7 DASサービスのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリの同期化処理」を参照してください。
Interstage Java EE 7 DASサービスを再起動します。
IJServerクラスタを再起動します。
証明書の有効期限切れなどに伴い、キーストアやトラストストアに登録されている証明書を更新する手順は、証明書を新規に登録する場合と同様です。「認証局が署名した証明書の設定」の手順を実施するようにしてください。