搜索

24.2.7.2. 配置加密

download PDF

为加密消息,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

    这将生成一个 defaultStore.keystore 文件,该文件将在 JGroups 配置中引用。

  2. 生成密钥存储后,将使用以下两种方法之一在 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,在 elytron 子系统中创建密钥存储,该子系统引用 使用对称加密 在 中创建的 defaultStore.keystore

    /subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
  2. 使用适当的属性设置,在 jgroups 子系统中添加 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"/>
          <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>
    注意

    上例使用明文密码;但是,也可以定义凭据存储来定义配置文件外的密码。有关配置此存储的更多信息,请参阅 如何配置服务器安全指南中 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/how_to_configure_server_security/#credential_store 的凭证存储部分

使用对称加密

要使用 ASYM_ENCRYPT,必须定义 AUTH 协议。有关在 jgroups 子系统中配置 AUTH 协议的说明,请参阅配置 身份验证 部分。

ASYM_ENCRYPT 使用以下两种方法之一进行配置:

通过生成 secret 密钥使用对称加密
  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,在 elytron 子系统中创建密钥存储,以引用 defaultStore.keystore

    /subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
  3. 使用适当的属性设置,在 jgroups 子系统中添加 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"/>
          <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>
    注意

    上例使用明文密码;但是,也可以定义凭据存储来定义配置文件外的密码。有关配置此存储的更多信息,请参阅 如何配置服务器安全指南中 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/how_to_configure_server_security/#credential_store 的凭证存储部分

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.