第5章 ブローカーのセキュリティー保護

5.1. 接続のセキュリティー保護

ブローカーがメッセージングクライアントに接続されている場合や、ブローカーが他のブローカーに接続されている場合は、Transport Layer Security(TLS) を使用してこれらの接続をセキュア化できます。

使用できる TLS 設定は 2 つあります。

  • 一方向 TLS。証明書を表示するブローカーのみが表示されます。これが最も一般的な設定です。
  • ブローカーとクライアント (または他のブローカー) の両方が証明書を提示する双方向 (または 相互)TLS。

本セクションの手順では、一方向と双方向 TLS の両方を設定する方法を説明します。

5.1.1. 一方向 TLS の設定

以下の手順は、一方向 TLS に特定のアクセプターを設定する方法を示しています。

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 特定のアクセプターでは、sslEnabled キーを追加し、値を true に設定します。さらに、keyStorePath キーおよび keyStorePassword キーを追加します。ブローカーキーストアに対応する値を設定します。以下に例を示します。

    <acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!</acceptor>

5.1.2. 双方向 TLS の設定

以下の手順では、双方向 TLS を設定する方法を説明します。

前提条件

  • 一方向 TLS に対して、指定のアクセプターを設定しておく必要があります。詳細は、「一方向 TLS の設定」 を参照してください。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 一方向 TLS 用に以前に設定したアクセプターの場合は、needClientAuth キーを追加します。この値は true に設定します。以下に例を示します。

    <acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!;needClientAuth=true</acceptor>
  3. 前述の手順の設定は、クライアントの証明書が信頼できるプロバイダーによって署名されていることを前提としています。クライアントの証明書が信頼されるプロバイダー (自己署名の場合など) で署名されて いない 場合には、ブローカーはクライアントの証明書をトラストストアにインポートする必要があります。この場合は、trustStorePath キーおよび trustStorePassword キーを追加します。ブローカーのトラストストアに対応する値を設定します。以下に例を示します。

    <acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!;needClientAuth=true;trustStorePath=../etc/client.truststore;trustStorePassword=5678!</acceptor>
注記

AMQ Broker は複数のプロトコルをサポートし、各プロトコルとプラットフォームには TLS パラメーターを指定する方法が異なります。ただし、コアプロトコル (ブリッジ) を使用するクライアントの場合、TLS パラメーターはブローカーのアクセプターと同様にコネクター URL に設定されます。

5.1.3. TLS 設定オプション

以下の表は、利用可能なすべての TLS 設定オプションを示しています。

オプション備考

sslEnabled

接続に対して SSL を有効にするかどうかを指定します。TLS を有効にするには true に設定する必要があります。デフォルト値は false です。

keyStorePath

アクセプターで使用される場合: ブローカー証明書を保持するブローカーの TLS キーストアへのパス (自己署名または認証局による署名のいずれか)。

コネクターで使用される場合: クライアント証明書を保持するクライアントの TLS キーストアへのパス。これは、双方向の TLS を使用している場合にのみ、コネクターに関係します。この値はブローカーに設定できますが、ダウンロードされ、クライアントによって使用されます。クライアントがブローカーに設定されたものとは異なるパスを使用する必要がある場合は、標準の javax.net.ssl.keyStore システムプロパティーまたは AMQ 固有の org.apache.activemq.ssl.keyStore システムプロパティーのいずれかを使用してブローカー設定を上書きできます。AMQ 固有のシステムプロパティーは、クライアント上の別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に役立ちます。

keyStorePassword

アクセプターで使用される場合: ブローカーのキーストアのパスワード。

コネクターで使用される場合: クライアントのキーストアのパスワード。これは、双方向の TLS を使用している場合にのみ、コネクターに関係します。この値はブローカーに設定できますが、ダウンロードされ、クライアントによって使用されます。クライアントがブローカーに設定されたものとは異なるパスワードを使用する必要がある場合は、標準の javax.net.ssl.keyStorePassword システムプロパティーまたは AMQ 固有の org.apache.activemq.ssl.keyStorePassword システムプロパティーのいずれかを使用してブローカー設定をオーバーライドできます。AMQ 固有のシステムプロパティーは、クライアント上の別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に役立ちます。

trustStorePath

アクセプターで使用される場合: ブローカーが信頼するすべてのクライアントのキーを保持するブローカーの TLS トラストストアへのパス。これは、双方向の TLS を使用している場合にのみ、アクセプターに関係します。

コネクターで使用される場合: クライアントが信頼するすべてのブローカーの公開鍵を保持するクライアントの TLS トラストストアへのパス。この値はブローカーに設定できますが、ダウンロードされ、クライアントによって使用されます。クライアントでサーバーの設定と異なるパスを使用する必要がある場合は、標準の javax.net.ssl.trustStore システムプロパティーまたは AMQ 固有の org.apache.activemq.ssl.trustStore システムプロパティーのいずれかを使用してサーバー側の設定をオーバーライドできます。AMQ 固有のシステムプロパティーは、クライアント上の別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に役立ちます。

trustStorePassword

アクセプターで使用される場合: ブローカーのトラストストアのパスワード。これは、双方向の TLS を使用している場合にのみ、アクセプターに関係します。

コネクターで使用される場合: クライアントのトラストストアのパスワード。この値はブローカーに設定できますが、ダウンロードされ、クライアントによって使用されます。クライアントがブローカーに設定されたものとは異なるパスワードを使用する必要がある場合は、標準の javax.net.ssl.trustStorePassword システムプロパティーまたは AMQ 固有の org.apache.activemq.ssl.trustStorePassword システムプロパティーのいずれかを使用してブローカー設定をオーバーライドできます。AMQ 固有のシステムプロパティーは、クライアント上の別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に役立ちます。

enabledCipherSuites

アクセプターまたはコネクターで使用されるかに関係なく、TLS 通信に使用される暗号スイートのコンマ区切りリストになります。デフォルト値は null です (JVM のデフォルト値を使用)。

enabledProtocols

アクセプターまたはコネクターで使用されるかに関係なく、TLS 通信に使用されるプロトコルのコンマ区切りリストになります。デフォルト値は null です (JVM のデフォルト値を使用)。

needClientAuth

このプロパティーはアクセプター専用です。これは、双方向 TLS が必要であるアクセプターに接続するクライアントに指示します。有効な値は true または false です。デフォルト値は false です。