24.2.7. 保护集群
要安全运行集群,需要解决几个问题:
- 防止未经授权的节点加入集群。这可以通过需要身份验证来解决。
- 防止非成员与群集成员通信.这可以通过加密消息来解决。
24.2.7.1. 配置身份验证
JGroups 身份验证由 AUTH
协议执行。目的是确保只有经过身份验证的节点才能加入群集。
在适用的服务器配置文件中,使用适当的属性设置添加 AUTH
协议。AUTH
协议应该在 pbcast.GMS
协议之前配置。
以下示例演示了如何将 AUTH
与不同类型的授权令牌搭配使用。
带有简单令牌的AUTH
...
<protocol type="pbcast.STABLE"/>
<auth-protocol type="AUTH">
<plain-token>
<shared-secret-reference clear-text="my_password"/>
</plain-token>
</auth-protocol>
<protocol type="pbcast.GMS"/>
...
带有 Digest Algorithm 令牌的 AUTH
此格式可与任何摘要算法一起使用,如 MD5 或 SHA-2。JBoss EAP 7.3 的默认摘要算法是 SHA-256,JVM 支持最强大的摘要算法。很多 JVM 还将实施 SHA-512。
...
<protocol type="pbcast.STABLE"/>
<auth-protocol type="AUTH">
<digest-token algorithm="SHA-512">
<shared-secret-reference clear-text="my_password"/>
</digest-token>
</auth-protocol>
<protocol type="pbcast.GMS"/>
...
带有 X509 令牌的 AUTH
本例在 elytron
子系统中创建新的密钥存储,并在 JGroups AUTH
配置中引用它。
创建密钥存储:
$ keytool -genkeypair -alias jgroups_key -keypass my_password -storepass my_password -storetype jks -keystore jgroups.keystore -keyalg RSA
使用管理 CLI 将密钥存储添加到
elytron
子系统:/subsystem=elytron/key-store=jgroups-token-store:add(type=jks,path=/path/to/jgroups.keystore,credential-reference={clear-text=my_password}, required=true)
在 JGroups 堆栈定义中,将
AUTH
配置为使用密钥存储:... <protocol type="pbcast.STABLE"/> <auth-protocol type="AUTH"> <cipher-token algorithm="RSA" key-alias="jgroups_key" key-store="jgroups-token-store"> <shared-secret-reference clear-text="my_password"/> <key-credential-reference clear-text="my_password"/> </cipher-token> </auth-protocol> <protocol type="pbcast.GMS"/> ...