24.2.7.2. 配置加密
为加密消息,JGroups 使用由群集成员共享的机密密钥。发送方使用共享机密密钥加密消息,接收方使用相同的机密密钥解密消息。通过使用 SYM_ENCRYPT
协议配置的 对称加密,节点使用共享密钥存储来检索密钥。使用 ASYM_ENCRYPT
协议配置的非 对称加密 时,节点在使用 AUTH
进行身份验证后,从集群的协调人员检索机密密钥。
使用对称加密
要使用 SYM_ENCRYPT
,您必须设置一个密钥存储,该存储将在每个节点的 JGroups 配置中引用。
创建密钥存储.
在以下命令中,将
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 配置中引用。生成密钥存储后,将使用以下两种方法之一在
SYM_PROTOCOL
中定义它。
使用 SYM_ENCRYPT
时配置 AUTH
是可选的。
通过直接引用密钥存储使用对称加密
在
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 使用对称加密
利用管理 CLI,在
elytron
子系统中创建密钥存储,该子系统引用 使用对称加密 在 中创建的defaultStore.keystore
。/subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
使用适当的属性设置,在
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 密钥使用对称加密
在
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 使用非对称加密
创建密钥存储以包含密钥对。以下命令使用
mykey
条目创建一个密钥存储:$ keytool -genkeypair -alias mykey -keyalg RSA -keysize 1024 -keystore defaultKeystore.keystore -dname "CN=localhost" -keypass secret -storepass secret
使用管理 CLI,在
elytron
子系统中创建密钥存储,以引用defaultStore.keystore
。/subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)
使用适当的属性设置,在
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 的凭证存储部分。