Liberty での SSL のデフォルト
Liberty におけるデフォルトの SSL 証明書、鍵ストア、構成を指定します。
デフォルトの証明書および鍵ストア
開発者が作業するために役立つ便利なツールとして、 ユーザーが securityUtility コマンドで createSSLCertificate パラメーターを使用して自己署名証明書を作成できます。 ユーザーがコマンド・ラインからツールを直接呼び出すか、あるいは、サーバーでそれを呼び出してサーバー始動時にデフォルトの証明書および鍵ストアを作成するようにすることができます。
<keyStore id="defaultKeyStore" password="yourPassword" />
defaultKeyStore の鍵ストア構成が設定されていて、サーバー始動時に鍵ストアが存在しない場合、 サーバーは createSSLCertificate パラメーターを呼び出します。 このパラメーターは、構成で指定されるパスワードを使用して鍵ストアを作成します。
- 場所: 鍵ストア・ファイルの名前は key.jks で、サーバーまたはクライアントの resources/security ディレクトリーにあります。
- 鍵ストア・タイプ: 鍵ストア・タイプは JKS です。
- パスワード: 構成で提供されたパスワード。
- タイプ: 証明書は自己署名証明書です。
- サイズ: デフォルト証明書サイズは 2048 です。
- 署名アルゴリズム: 証明書の署名アルゴリズムは SHA256WITHRSA です。
- 有効期間: 証明書は 365 日間有効です。
- SubjectDN: 証明書は、CN=<hostname>,OU=<client or server name>,O=ibm,C=US の SubjectDN で作成されます。
ユーザーが証明書をカスタマイズしたい場合は、コマンド行で createSSLCertificate パラメーターを呼び出すことができます。
デフォルト SSL 構成
SSL に必要な最小構成は、 defaultKeyStore という単一の keystore エレメントです。 構成に defaultKeyStore が存在する場合、ランタイムは、それに基づく defaultSSLConfig という SSL 構成を作成します。
defaultSSLConfig の詳細:
- プロトコル: IBM® JRE が使用されるとき、プロトコルはデフォルトで SSL_TLSv2 に設定されます。Oracle JRE が使用される場合、プロトコルとして SSL が使用されます。
- 暗号: 基礎となる JRE からサポートされる暗号のリストを取得することで、暗号リストが作成されます。 デフォルトでリストは、128 ビット以上のすべての暗号または 3DES に削減されます。 RC4 は、これを有効にすることが安全とみなされないため、削除されます。ECDHE 暗号は、これをサポート しないサーバーを使用する場合にエラーが発生する可能性があるため、削除されます。暗号リストをカスタマイズして、それらを含めることができます。
- クライアント認証: デフォルトで clientAuthentication と clientAuthenticationSupported は使用不可です。
- 鍵ストア:デフォルト構成では、鍵とトラストストアの両方として defaultKeyStore が使用されます。
SSL 構成プロパティーをカスタマイズするために、server.xml ファイルに defaultSSLConfig という ssl エレメントを入れることができます。defaultSSLConfig というカスタマイズした ssl エレメントは、別の SSL 構 成がデフォルトとして識別されていない場合、デフォルトの SSL 構成のように引き続き扱われます。 詳しくは、SSL 構成の属性を参照してください。
<sslDefault sslRef="customSSLConfiguration" />
(transportSecurity-1.0) と (ssl-1.0) は、両方ともセキュリティー処理動作です。フィックスパック 17.0.0.1 以降で、transportSecurity-1.0 動作は ssl-1.0 動作に取って代わっています。アウトバウンド接続の SSL オプションを使用するには、transportSecurity-1.0 動作を使用します。ご使用のセキュリティー構成にアウトバウンド接続のオプションが含まれていない場合、引き続き ssl-1.0 動作を使用できます。
- (transportSecurity-1.0) 動作
transportSecurity-1.0 フィーチャーを有効にすると、アウトバウンド SSL オプションが使用可能になります。sslDefault エレメントの outboundSSLRef 属性でアウトバウンド・デフォルトを設定するか、または、 SSL 構成に SSL フィルターを設定して、動的アウトバウンド接続を許可することができます。フィルターは、ホストからなるか、または、ホストとポートの組み合わせからなります。アウトバウンド接続のホストおよびポートに基づいて、アウトバウンド接続と SSL 構成を突き合わせることができます。
transportSecurity-1.0 フィーチャーが有効にされていると、SSL ランタイム・コードは SSLContext プロセス・デフォルトを設定しません。SSL ランタイム・コードは、 ssl.SocketFactory.provider Java™ セキュリティー・プロパティーを使用してカスタム SSLSocketFactory クラスを設定します。SSLContext プロセス・デフォルトは、鍵およびトラストのために cacerts ファイルを使用する SSLContext Java Secure Socket Extension (JSSE) デフォルトです。
本プログラムは、SSLSocketFactory クラス・デフォルトを javax.net.ssl.SSLSocketFactory.getDefault() プロパティーを使用して取得しようとするコードに、Liberty カスタム SSL ソケット・ファクトリーを返します。カスタム SSLSocketFactory クラスは、アウトバウンド接続用の適切な SSL 構成を解決できます。
Liberty が提供するフィーチャーは、Liberty SSL 構成を使用します。ただし、アウトバウンド SSL 呼び出しを行うサード・パーティー API では、Liberty 機能を使用するために構成が必要になることがあります。Liberty SSL ランタイム・コードは、transportSecurity-1.0 フィーチャーまたは ssl-1.0 フィーチャーが有効になっている場合、SSLContext プロセス・デフォルトを設定しません。デフォルト SSL コンテキストに依存するサード・パーティー API は Liberty SSL 構成から利点を得ることはありません。transportSecurity-1.0 フィーチャーが有効になっている場合、Liberty SSL ランタイム・コードは、ssl.SocketFactory.provider Java セキュリティー・プロパティーを使用してカスタム SSLSocketFactory クラスを設定します。サード・パーティー API は、 javax.net.ssl.SSLSocketFactory.getDefault() プロパティーを呼び出すことによって、SocketFactory デフォルトを使用して Liberty SSL 構成から利点を得られます。注: Liberty カスタム SSLSocketFactory クラスは、Java システム・プロパティー (javax.net.ssl.keystore など) を認知しません。- (ssl-1.0) 動作
Liberty デフォルト SSL 構成の属性を使用して、SSLContext を作成します。 SSLContext は、Java API SSLContext.setDefault() を使用して、 デフォルト SSLContext としてプロセスに設定されます。 アプリケーションが https の URL を使用して httpURLConnection() のような API を呼び出して、SSL 情報を指定しない場合、 アプリケーションは、プロセスのデフォルト SSLContext を選択します。この場合、Liberty のデフォルト SSL 構成で作成された SSLContext です。
デフォルトの SSL 構成が Liberty に設定されていない場合、Liberty は JSSE のデフォルト SSLContext を使用します。JSSE のデフォルト SSLContext は、鍵ストアとトラストストアに cacerts ファイルを使用します。 SSL フィーチャーが定義されていない場合、または存在す る SSL 構成がデフォルトとして識別されていない場合、Liberty にはデフォ ルトの SSL 構成はありません。デフォルト構成は、呼び出された defaultSSLConfig になるか (defaultKeyStore が定義されている場合は暗黙的であることも可能)、あるいは、sslDefault エレメントを使用し て代替 SSL 構成を指定することもできます。
javax システム・プロパティー (javax.net.ssl.keystore) は、デフォルト SSL コンテ キストの鍵ストアおよびトラストストア情報のセットアップに使用されるものであるため、これらは使用しないでください。 これらのプロパティーがプロセスに設定された場合、SSLContext.setDefault() の呼び出しにより、無効になります。
SSL エレメントがアウトバウンド SSL 接続のデフォルトとして使用されるようにするために、sslDefault エレメントの outboundSSLRef 属性を使用できます。
デフォルト・アウトバウンド SSL エレメントを指定するには、transportSecurity-1.0 フィーチャーが有効になっている必要があります。outboundSSLRef が指定されている場合、アウトバウンド SSL 接続は、デフォルトで、その属性で指定されている SSL 構成を使用します。transportSecurity-1.0 フィーチャーが欠落している場合は、outboundSSLRef は無視されます。outboundSSLRef 属性が指定されていない場合は、アウトバウンド呼び出しは、sslRef 属性で指定されている値、または defaultSSLConfig (sslRef が SSL 構成を参照していない場合) を使用します。<feature>transportSecurity-1.0</feature> <sslDefault sslRef="mySSLConfig" outboundSSLRef="customSSLConfiguration" />