24.2.7.2. 暗号化の設定

JGroups はクラスターのメンバーが共有する秘密鍵を使用してメッセージを暗号化します。送信元は共有する秘密鍵を使用してメッセージを暗号化し、受信先は同じ秘密鍵を使用してメッセージを復号化します。対称暗号化SYM_ENCRYPT プロトコルを使用して設定され、ノードは共有のキーストアを使用して秘密鍵を取得します。非対称暗号化ASYM_ENCRYPT プロトコルを使用して設定され、ノードは AUTH を使用して認証された後にクラスターのコーディネーターから秘密鍵を取得します。

対称暗号化の使用

SYM_ENCRYPT を使用するには、各ノードの JGroups 設定で参照されるキーストアを設定する必要があります。

  1. キーストアを作成します。

    以下のコマンドでは、VERSION を適切な JGroups JAR バージョンに置き換え、PASSWORD をキーストアパスワードに置き換えます。

    $ java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykey

    これにより、JGroups 設定で参照される defaultStore.keystore ファイルが生成されます。

  2. キーストアが生成されたら、2 つの方法の 1 つを使用して SYM_PROTOCOL で定義されます。

注記

SYM_ENCRYPT を使用する場合、AUTH の設定は任意です。

キーストアを直接参照して対称暗号化を使用
  1. jgroups サブシステムで SYM_ENCRYPT プロトコルを設定します。

    該当するサーバー設定ファイルに、SYM_ENCRYPT プロトコルと適切なプロパティー設定を追加します。このプロトコルは、以前作成されたキーストアを参照します。SYM_ENCRYPT プロトコルは pbcast.NAKACK2 の直前に設定する必要があります。

    <subsystem xmlns="urn:jboss:domain:jgroups:6.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <protocol type="SYM_ENCRYPT">
            <property name="provider">SunJCE</property>
            <property name="sym_algorithm">AES</property>
            <property name="encrypt_entire_message">true</property>
            <property name="keystore_name">/path/to/defaultStore.keystore</property>
            <property name="store_password">PASSWORD</property>
            <property name="alias">mykey</property>
          </protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
Elytron と対称暗号化の使用
  1. 管理 CLI を使用して、対称暗号化を使用して 作成された defaultStore.keystore を参照するキーストアを elytron サブシステムに作成します。

    /subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
  2. SYM_ENCRYPT プロトコルと適切なプロパティー設定を jgroups サブシステムに追加します。以下の設定どおり、SYM_ENCRYPT プロトコルは pbcast.NAKACK2 プロトコルの直前に設定する必要があります。

    <subsystem xmlns="urn:jboss:domain:jgroups:6.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <encrypt-protocol type="SYM_ENCRYPT" key-alias="mykey" key-store="jgroups-keystore">
            <key-credential-reference clear-text="PASSWORD"/>
            <property name="provider">SunJCE</property>
            <property name="encrypt_entire_message">true</property>
          </encrypt-protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
    注記

    上記の例はクリアテキストのパスワードを使用しますが、認証情報ストアを定義して設定ファイル外部にパスワードを定義することもできます。認証情報ストアの設定に関する詳細は、『How to Configure Server Security』の「Credential Store」を参照してください。

非対称暗号化の使用

ASYM_ENCRYPT を使用するには AUTH プロトコルを定義する必要があります。AUTH プロトコルを jgroups サブシステムで設定する手順は、「認証の設定」を参照してください。

ASYM_ENCRYPT は 2 つの方法の 1 つで設定されます。

秘密鍵を生成して非対象暗号化を使用
  1. jgroups サブシステムで ASYM_ENCRYPT プロトコルを設定します。

    該当のサーバー設定ファイルに ASYM_ENCRYPT プロトコルと適切なプロパティー設定を追加します。以下の設定どおり、ASYM_ENCRYPT プロトコルは pbcast.NAKACK2 プロトコルの直前に設定する必要があります。

    <subsystem xmlns="urn:jboss:domain:jgroups:6.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <protocol type="ASYM_ENCRYPT">
            <property name="encrypt_entire_message">true</property>
            <property name="sym_keylength">128</property>
            <property name="sym_algorithm">AES/ECB/PKCS5Padding</property>
            <property name="asym_keylength">512</property>
            <property name="asym_algorithm">RSA</property>
          </protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <!-- Configure AUTH protocol here -->
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
Elytron と非対称暗号化の使用
  1. キーペアが含まれるキーストアを作成します。以下のコマンドは、mykey というエイリアスでキーストアを作成します。

    $ keytool -genkeypair -alias mykey -keyalg RSA -keysize 1024 -keystore defaultKeystore.keystore -dname "CN=localhost" -keypass secret -storepass secret
  2. 管理 CLI を使用して、defaultStore.keystore を参照するキーストアを elytron サブシステムに作成します。

    /subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
  3. ASYM_ENCRYPT プロトコルと適切なプロパティー設定を jgroups サブシステムに追加します。以下の設定どおり、ASYM_ENCRYPT プロトコルは pbcast.NAKACK2 プロトコルの直前に設定する必要があります。

    <subsystem xmlns="urn:jboss:domain:jgroups:6.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <encrypt-protocol type="ASYM_ENCRYPT" key-alias="mykey" key-store="jgroups-keystore">
            <key-credential-reference clear-text="secret" />
            <property name="encrypt_entire_message">true</property>
          </encrypt-protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <!-- Configure AUTH protocol here -->
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
    注記

    上記の例はクリアテキストのパスワードを使用しますが、認証情報ストアを定義して設定ファイル外部にパスワードを定義することもできます。認証情報ストアの設定に関する詳細は、『How to Configure Server Security』の「Credential Store」を参照してください。