Liberty での SSL のデフォルト

Liberty におけるデフォルトの SSL 証明書、鍵ストア、構成を指定します。

デフォルトの証明書および鍵ストア

開発者が作業するために役立つ便利なツールとして、 ユーザーが securityUtility コマンドで createSSLCertificate パラメーターを使用して自己署名証明書を作成できます。 ユーザーがコマンド・ラインからツールを直接呼び出すか、あるいは、サーバーでそれを呼び出してサーバー始動時にデフォルトの証明書および鍵ストアを作成するようにすることができます。

server.xml ファイルに defaultKeyStore という keystore エレメントがある場合、 サーバーはデフォルトの鍵ストアおよび証明書を作成します。 以下に例を示します。
<keyStore id="defaultKeyStore" password="yourPassword" />

defaultKeyStore の鍵ストア構成が設定されていて、サーバー始動時に鍵ストアが存在しない場合、 サーバーは createSSLCertificate パラメーターを呼び出します。 このパラメーターは、構成で指定されるパスワードを使用して鍵ストアを作成します。

デフォルト鍵ストアの詳細:
  • 場所: 鍵ストア・ファイルの名前は key.jks で、サーバーまたはクライアントの resources/security ディレクトリーにあります。
  • 鍵ストア・タイプ: 鍵ストア・タイプは JKS です。
  • パスワード: 構成で提供されたパスワード。
Liberty で作成されるデフォルト証明書の詳細:
  • タイプ: 証明書は自己署名証明書です。
  • サイズ: デフォルト証明書サイズは 2048 です。
  • 署名アルゴリズム: 証明書の署名アルゴリズムは SHA256WITHRSA です。
  • 有効期間: 証明書は 365 日間有効です。
  • SubjectDN: 証明書は、CN=<hostname>,OU=<client or server name>,O=ibm,C=US の SubjectDN で作成されます。

ユーザーが証明書をカスタマイズしたい場合は、コマンド行で createSSLCertificate パラメーターを呼び出すことができます。

注: 集合コントローラーの使用が実際的でない場合 (1 つまたは 2 つのみの Liberty サーバーしかない場合など)、自己署名証明書を使用して、Liberty メンバー・サーバーに接続できるクライアントの数を制限できます。推奨されるのは、Liberty サーバー群の前面で 1 つの IHS サーバーを使用することであり、そこで、適切な CA で署名された証明書を、どのクライアントが HIS に接続できるのかを制御する CN ホワイトリスティングと共に使用できます。IHS と Liberty メンバー・サーバーとの間の信頼できるチャネルは、自己署名証明書を使用して保守できます。

デフォルト SSL 構成

SSL に必要な最小構成は、 defaultKeyStore という単一の keystore エレメントです。 構成に defaultKeyStore が存在する場合、ランタイムは、それに基づく defaultSSLConfig という SSL 構成を作成します。

defaultSSLConfig の詳細:

  • プロトコル: IBM® JRE が使用されるとき、プロトコルはデフォルトで SSL_TLSv2 に設定されます。Oracle JRE が使用される場合、プロトコルとして SSL が使用されます。
  • 暗号: 基礎となる JRE からサポートされる暗号のリストを取得することで、暗号リストが作成されます。 デフォルトでリストは、128 ビット以上のすべての暗号または 3DES に削減されます。 RC4 は、これを有効にすることが安全とみなされないため、削除されます。ECDHE 暗号は、これをサポート しないサーバーを使用する場合にエラーが発生する可能性があるため、削除されます。暗号リストをカスタマイズして、それらを含めることができます。
  • クライアント認証: デフォルトで clientAuthenticationclientAuthenticationSupported は使用不可です。
  • 鍵ストア:デフォルト構成では、鍵とトラストストアの両方として defaultKeyStore が使用されます。

SSL 構成プロパティーをカスタマイズするために、server.xml ファイルに defaultSSLConfig という ssl エレメントを入れることができます。defaultSSLConfig というカスタマイズした ssl エレメントは、別の SSL 構 成がデフォルトとして識別されていない場合、デフォルトの SSL 構成のように引き続き扱われます。 詳しくは、SSL 構成の属性を参照してください。

デフォルト SSL 構成として構成で別の ssl エレメントを指定するために、 ユーザーは sslDefault エレメントでそれを識別できます。
<sslDefault sslRef="customSSLConfiguration" />

[17.0.0.1 and later](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() の呼び出しにより、無効になります。

[17.0.0.1 and later]SSL エレメントがアウトバウンド SSL 接続のデフォルトとして使用されるようにするために、sslDefault エレメントの outboundSSLRef 属性を使用できます。
<feature>transportSecurity-1.0</feature>
<sslDefault sslRef="mySSLConfig" outboundSSLRef="customSSLConfiguration" />
デフォルト・アウトバウンド SSL エレメントを指定するには、transportSecurity-1.0 フィーチャーが有効になっている必要があります。outboundSSLRef が指定されている場合、アウトバウンド SSL 接続は、デフォルトで、その属性で指定されている SSL 構成を使用します。transportSecurity-1.0 フィーチャーが欠落している場合は、outboundSSLRef は無視されます。outboundSSLRef 属性が指定されていない場合は、アウトバウンド呼び出しは、sslRef 属性で指定されている値、または defaultSSLConfig (sslRef が SSL 構成を参照していない場合) を使用します。

トピックのタイプを示すアイコン 参照トピック

ファイル名: rwlp_liberty_ssl_defaults.html