ページの先頭行へ戻る
Interstage Application Server V13.0.0 GlassFish 設計・構築・運用ガイド
FUJITSU Software

5.3.3 SSL

GlassFishにおけるSSL/TLSのサポート範囲は以下のとおりです。

項目

サポート範囲

証明書のニックネーム

JDKのkeytoolコマンドで指定可能な文字列

プロトコルバージョン

TLS1.0

TLS1.1

TLS1.2

TLS1.3

暗号化方式

使用する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等を推奨

5.3.3.1 GlassFishの設定

証明書のニックネーム

GlassFishで使用する証明書を対応するキーストアの別名で指定します。「サーバー(クライアント)証明書の設定」に従ってキーストアにサーバー証明書を設定する場合、keytool -genkeypairの-aliasに指定した別名を本定義に設定してください。設定の詳細についてはネットワーク設定の定義項目「証明書のニックネーム」を参照してください。


プロトコルバージョン

SSL/TLSのプロトコルバージョンの有効/無効を設定により変更可能です。設定の詳細については、ネットワーク設定の定義項目「TLS1.0有効化」、「TLS1.1有効化」、「TLS1.2有効化」、「TLS1.3有効化」を参照してください。


暗号化方式

SSLのサーバー、クライアント間でコネクション確立時に選択される暗号化方式のリストを設定します。設定の詳細については、ネットワーク設定の定義項目「暗号化方式群」を参照してください。


クライアント認証

クライアント認証では、SSLのサーバーがクライアントから送信された証明書を使って、クライアントの本人確認を行います。

動作の詳細については、ネットワーク設定の定義項目「クライアント認証」を参照してください。


5.3.3.2 証明書

証明書はデジタル署名された公開鍵で、ペアの秘密鍵を持っています。SSLでは以下の証明書を使用します。

証明書は、マスターパスワードで保護されたキーストア/トラストストアに登録します。マスターパスワードの詳細は「5.2.8 マスターパスワード」を参照してください。

キーストア/トラストストアはJDKのkeytoolコマンドで操作します。キーストア/トラストストア内の証明書は別名により一意に識別されます。keytoolコマンド、別名の詳細は、JDKの情報を参照してください。キーストア/トラストストアに格納する証明書は、それぞれ以下のとおりです。

認証局が署名した証明書を使用する場合
  • キーストア

    • ルート認証局または中間認証局によって署名された、サーバー(クライアント)証明書

    • サーバー(クライアント)証明書に対応する秘密鍵

    • ルート認証局の証明書

    • 中間認証局の証明書(必要な場合)

  • トラストストア

    • サーバー(クライアント)が信頼するルート認証局の証明書

    • サーバー(クライアント)が信頼する中間認証局の証明書(必要な場合)

自己署名証明書を使用する場合
  • キーストア

    • 自己署名証明書

    • 自己署名証明書に対応する秘密鍵

  • トラストストア

    • 自己署名証明書

ポイント

  • サーバー(クライアント)は、キーストア内の認証局証明書とサーバー(クライアント)証明書を通信相手に送信します。

  • サーバー(クライアント)は、通信相手から受信した証明書とトラストストア内の証明書を比較することで証明書の正当性を検証します。

キーストアファイルとトラストストアファイルは、以下に格納されます。

キーストアファイル:[運用資産格納ディレクトリー]\domains\domain1\config\keystore.jks
トラストストアファイル:[運用資産格納ディレクトリー]\domains\domain1\config\cacerts.jks

キーストアファイル:[運用資産格納ディレクトリー]/domains/domain1/config/keystore.jks
トラストストアファイル:[運用資産格納ディレクトリー]/domains/domain1/config/cacerts.jks

注意

  • キーストア/トラストストアの内容を追加・更新・削除する場合、事前にバックアップを作成してください。

  • キーストアファイルとトラストストアファイルは、DASと全てのGlassFish Serverクラスター間で同期化されます。このため、証明書の設定はDASのキーストア/トラストストアに対して行ってください。

  • キーストア/トラストストアの内容をkeytoolコマンドで追加・更新・削除した場合は、DASとGlassFish Serverクラスターの再起動が必要です。

  • キーストアファイルとトラストストアファイルに対し、運用方針に従ってセキュリティ権限を設定してください。

  • keytoolコマンド実行時、キーストア/トラストストアのパスワードにはマスターパスワードを指定してください。

  • キーストア/トラストストアのパスワードをkeytoolコマンドで変更しないでください。

  • keytoolコマンドで鍵ペアを作成する時、秘密鍵のパスワードにはマスターパスワードと同じものを指定してください。

  • インストール時にキーストア/トラストストアに登録されている別名(s1as/glassfish-instance)の証明書は実際の運用では使用しないでください。


5.3.3.3 証明書の設定

本製品では以下の通信をSSLで行うことができます。各通信でSSLを使用するための設定について説明します。

WebブラウザとWebサーバー間の通信

設定方法については、「Interstage HTTP Server 2.4 運用ガイド」を参照してください。


WebブラウザとWebコンテナ間の通信

Webンテナ側の設定

WebコンテナがHTTPSリスナーでSSL通信を行う場合は以下の設定を行ってください。

  1. サーバー(クライアント)証明書の設定」の手順に従ってサーバー証明書を設定してください。

  2. SSLのクライアント認証を行う場合は「信頼する認証局証明書の設定」の手順に従って設定してください。

  3. HTTPSリスナーのSSLの定義項目を設定します。設定対象の定義項目については、「GlassFishの設定」を参照してください。

Webブラウザ側の設定

信頼する認証局の証明書がWebブラウザに登録されていない場合は、認証局からルート証明書と必要に応じて中間認証局証明書を入手し、登録してください。

WebアプリケーションがSSLクライアントとなっての通

WebアプリケーションがSSLクライアントとなって通信する場合は、アプリケーションの実装方法によって必要な対応が異なります。

GlassFishのキーストア・トラストストアを利用する場合

GlassFishのトラストストアに必要な証明書を設定することにより、WebアプリケーションがSSLクライアントとなって通信することができます。「信頼する認証局証明書の設定」の手順に従って、トラストストアに認証局証明書の設定してください。

また、クライアント認証が必要な場合、以下の手順でキーストアに証明書の設定してください。

  1. サーバー(クライアント)証明書の設定」に従って、キーストアにクライアント証明書とルート証明書、必要に応じて中間認証局証明書を設定してください。

  2. DASが起動していない場合、DASを起動します。

  3. asadmin list-jvm-optionサブコマンドを実行し、GlassFish Serverクラスターに設定されているJava VMオプションに「-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=クライアント証明書の別名」が含まれているかを確認します。クライアント証明書の別名の初期値はs1asです。

    Cluster001のJava VMオプションを確認する場合、以下のコマンドを実行します。

    C:\Interstage\glassfish5\glassfish\bin\asadmin list-jvm-options --target Cluster001

    /opt/FJSViaps/glassfish5/glassfish/bin/asadmin list-jvm-options --target Cluster001

    コマンドの実行結果に以下が表示されていることを確認します。

    -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as

  4. asadmin list-jvm-optionsサブコマンドで表示されたJava VMオプションの「-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=クライアント証明書の別名」を削除します。

    Cluster001のJava VMオプションを削除する場合、以下のコマンドを実行します。

    C:\Interstage\glassfish5\glassfish\bin\asadmin delete-jvm-options --target Cluster001 \-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as

    /opt/FJSViaps/glassfish5/glassfish/bin/asadmin delete-jvm-options --target Cluster001 \\-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as

  5. Java VMオプションに「-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=クライアント証明書の別名」を追加します。

    キーストアに別名「mycert」でクライアント証明書を設定した場合、以下のコマンドを実行します。

    C:\Interstage\glassfish5\glassfish\bin\asadmin create-jvm-options --target Cluster001 \-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=mycert

    /opt/FJSViaps/glassfish5/glassfish/bin/asadmin create-jvm-options --target Cluster001 \\-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=mycert

  6. Java VMオプションの変更時に--targetに指定したDASまたはGlassFish Serverクラスターを再起動します。

Webアプリケーション独自にキーストア・トラストストアを準備してロードする場合

GlassFishのキーストア・トラストストアを使用せず、アプリケーションで独自にキーストア・トラストストアを準備し、Webアプリケーション内でjava.security.KeyStoreのload等のAPIを使用してキーストア・トラストストアを参照することができます。詳細は、JDKのドキュメントを参照してください。

注意

  • DASやGlassFish Serverクラスターに設定されている以下のJava VMオプションを変更しないでください。変更したり削除したりすると、GlassFish Serverクラスターの起動や起動後の操作に失敗する可能性があります。

    • -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サービス側の設定

WebサービスでSSLを利用するには、WebサーバーまたはWebコンテナでSSLを有効にしてください。

Webサービスクライアント側の設定

Webサービスクライアントを実行するアプリケーションクライアントコンテナに対して、キーストアファイルとトラストストアファイルの設定、およびJava VMオプションの設定を以下の手順で行ってください。

  1. JDKのkeytoolコマンドでキーストア/トラストストアを作成します。

  2. トラストストアに信頼する認証局の証明書を登録します。

  3. クライアント認証を使用する場合は、キーストアにクライアント証明書と信頼する認証局の証明書を登録します。

  4. VMARGS環境変数に、以下を設定してください。

    クライアント認証を使用しない場合

    set VMARGS=-Djavax.net.ssl.trustStore=トラストストアファイル名 -Djavax.net.ssl.trustStorePassword=トラストストアのパスワード

    VMARGS="-Djavax.net.ssl.trustStore=トラストストアファイル名 -Djavax.net.ssl.trustStorePassword=トラストストアのパスワード"
    export VMARGS

    クライアント認証を使用する場合

    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=キーストアに登録したクライアント証明書の別名"
    export VMARGS


JAX-RSクライアントとJAX-RSアプリケーション間の通信

JAX-RSアプリケーション側の設定

JAX-RSアプリケーションでSSLを利用するには、WebサーバーまたはWebコンテナでSSLを有効にしてください。


JAX-RSクライアント側の設定

JAX-RSクライアントでSSLを利用する場合は、「WebサービスクライアントとWebサービス間の通信」の「Webサービスクライアント側の設定」と同様の方法で設定することができます。


クライアントがJAX-RSクライアントではなくWebブラウザやモバイル端末などのHTTPクライアントの場合は、使用するHTTPクライアントの仕様を確認して、信頼する証明書の登録などの必要な設定を行ってください。


5.3.3.4 認証局が署名した証明書の設定

サーバー(クライアント)証明書の設定

認証局が署名したサーバー(クライアント)証明書の取得とキーストアの設定を以下の手順で行います。証明書を新規に登録する場合だけでなく、証明書の有効期限切れなどに伴い証明書を更新する場合も、本手順を実行してください。

  1. キーストアファイルをバックアップします。

  2. キーストアに既に登録されている証明書を更新する際に既存の別名を使用する場合は、キーストアに登録されている該当の公開鍵と秘密鍵のペアを削除します。

    別名newcertの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -delete -alias newcert -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -delete -alias newcert -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  3. キーストアに任意の別名で新しい公開鍵と秘密鍵のペアを生成します。
    また、以下の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\openjdk\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\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/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/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  4. 秘密鍵のパスワードを指定します。キーストアのパスワードと同様にするため、[ENTER/RETURN]のみを入力してください。

    <newcert>の鍵パスワードを入力してください

    (キーストアのパスワードと同じ場合はRETURNを押してください): [ENTER/RETURN]

  5. キーストアから証明書署名要求(CSR)を生成します。

    別名newcert、証明書署名要求ファイル名newcert.csrの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -certreq -alias newcert -file newcert.csr -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -certreq -alias newcert -file newcert.csr -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  6. 認証局に証明書署名要求(CSR)を送信し、以下を取得します。

    • 認証局によって署名された証明書

    • 認証局のルート証明書

    • 中間認証局証明書(必要な場合)

  7. 認証局のルート証明書をキーストアに登録します。

    別名ca_root、証明書ファイル名ca_root.cerの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  8. 必要に応じて中間認証局証明書を上位階層の証明書から順にキーストアに登録します。

    別名ca_inter、証明書ファイル名ca_inter.cerの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  9. 取得した証明書をキーストアに登録します。

    別名newcert、証明書ファイル名mycert.cerの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -importcert -alias newcert -file mycert.cer -trustcacerts -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -importcert -alias newcert -file mycert.cer -trustcacerts -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  10. DASのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリーの同期化処理」を参照してください。

  11. DASを再起動します。

  12. GlassFish Serverクラスターを再起動します。


信頼する認証局証明書の設定

  1. トラストストアファイルをバックアップします。

  2. 信頼する認証局のルート証明書をトラストストアに登録します。

    別名ca_root、証明書ファイル名ca_root.cerの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore C:\Interstage\glassfish5\var\domains\domain1\config\cacerts.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -importcert -alias ca_root -file ca_root.cer -trustcacerts -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/cacerts.jks

  3. 必要に応じて中間認証局証明書を上位階層の証明書から順にトラストストアに登録します。

    別名ca_inter、証明書ファイル名ca_inter.cerの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore C:\Interstage\glassfish5\var\domains\domain1\config\cacerts.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -importcert -alias ca_inter -file ca_inter.cer -trustcacerts -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/cacerts.jks

  4. DASのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリーの同期化処理」を参照してください。

  5. DASを再起動します。

  6. GlassFish Serverクラスターを再起動します。


5.3.3.5 自己署名証明書の設定

別名s1as、glassfish-instance以外の自己署名証明書を使用する場合は、以下の手順で設定します。

  1. サーバー(クライアント)証明書の設定」の1.から4.までを行います。

  2. キーストアから公開鍵をエクスポートします。

    別名newcert、証明書ファイル名newcert.cerの場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -export -alias newcert -file newcert.cer -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -export -alias newcert -file newcert.cer -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks

  3. DASのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリーの同期化処理」を参照してください。

  4. DASを再起動します。

  5. GlassFish Serverクラスターを再起動します。

  6. エクスポートした公開鍵をクライアント側に登録します。


注意

自己署名証明書は通信相手に対して正当性を証明できないため、運用環境では使用しないでください。


5.3.3.6 証明書の削除

証明書の有効期限が切れた場合や証明書が不要になった場合、以下の手順により証明書を削除します。

証明書の有効期限が切れた場合は、キーストアやトラストストアに格納されている証明書を削除し、必要に応じて「5.3.3.4 認証局が署名した証明書の設定」の手順を実施するようにしてください。

なお、証明書の有効期限が切れた場合、サーバーログにNCLS-SECURITY-05054のメッセージが出力されるようになります。

  1. キーストアファイル、またはトラストストアファイルをバックアップします。

  2. キーストアファイル、またはトラストストアファイルに格納されている証明書を削除します。

    キーストアから別名newcertを削除する場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -delete -alias newcert -keystore C:\Interstage\glassfish5\var\domains\domain1\config\keystore.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -delete -alias newcert -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/keystore.jks


    トラストストアから別名gtecybertrust5caを削除する場合の実行例

    C:\Interstage\openjdk\jdk8\bin\keytool -delete -alias gtecybertrust5ca -keystore C:\Interstage\glassfish5\var\domains\domain1\config\cacerts.jks

    /opt/FJSViaps/openjdk/jdk8/bin/keytool -delete -alias gtecybertrust5ca -keystore /var/opt/FJSViaps/glassfish5/domains/domain1/config/cacerts.jks

  3. DASのdomain.xmlの更新日時を変更します。詳細は「2.1.4 リポジトリーの同期化処理」を参照してください。

  4. DASを再起動します。

  5. GlassFish Serverクラスターを再起動します。


5.3.3.7 証明書の更新

証明書の有効期限切れなどに伴い、キーストアやトラストストアに登録されている証明書を更新する手順は、証明書を新規に登録する場合と同様です。「認証局が署名した証明書の設定」の手順を実施するようにしてください。