第 6 章 配置 TLS/SSL 加密
您可以通过配置包含 Data Grid 的公钥和私钥的密钥存储来保护数据网格服务器连接的安全性。如果需要 mutual TLS,您还可以配置客户端证书身份验证。
6.1. 配置 Data Grid Server 密钥存储
将密钥存储添加到 Data Grid Server,并将它配置为提供 SSL/TLS 证书,以将其身份验证给客户端。如果安全域包含 TLS/SSL 身份,它将加密所有使用该安全域的 Data Grid Server 端点的连接。
先决条件
- 创建含有 Data Grid Server 证书或证书链的密钥存储。
数据网格服务器支持以下密钥存储格式:JKS、JCEKS、PKCS12/PFX 和 PEM。如果存在 Bouncy Castle 库,还支持 BKS、BCFKS 和 UBER。
在生产环境中,服务器证书应该由可信证书颁发机构(根)或 Intermediate CA 签名。
如果它们同时包含以下内容,您可以使用 PEM 文件作为密钥存储:
- PKCS#1 或 PKCS#8 格式的私钥。
- 个或多个证书。
您还应该使用空密码(密码="")
配置 PEM 文件密钥存储。
流程
- 打开 Data Grid Server 配置进行编辑。
-
将含有 Data Grid Server 的 SSL/TLS 身份的密钥存储添加到
$RHDG_HOME/server/conf
目录中。 -
在 Data
Grid 服务器
安全域中添加服务器事件定义。 -
使用
path
属性指定密钥存储文件名。 -
为密钥存储密码和证书别名
提供密钥存储密码
和别名
属性。 - 保存对您的配置的更改。
后续步骤
使用信任存储配置客户端,以便他们可以验证用于 Data Grid 服务器的 SSL/TLS 身份。
密钥存储配置
XML
<server xmlns="urn:infinispan:server:13.0"> <security> <security-realms> <security-realm name="default"> <server-identities> <ssl> <!-- Adds a keystore that contains server certificates that provide SSL/TLS identities to clients. --> <keystore path="server.p12" relative-to="infinispan.server.config.path" password="secret" alias="my-server"/> </ssl> </server-identities> </security-realm> </security-realms> </security> </server>
JSON
{ "server": { "security": { "security-realms": [{ "name": "default", "server-identities": { "ssl": { "keystore": { "alias": "my-server", "path": "server.p12", "password": "secret" } } } }] } } }
YAML
server: security: securityRealms: - name: "default" serverIdentities: ssl: keystore: alias: "my-server" path: "server.p12" password: "secret"
其他资源
6.1.1. 生成 Data Grid Server 密钥存储
配置 Data Grid Server,使其在启动时自动生成密钥存储。
自动生成的密钥存储:
- 不应在生产环境中使用。
- 在需要时生成;例如,从客户端获取第一个连接。
- 包含您可以在 Hot Rod 客户端中使用的证书。
流程
- 打开 Data Grid Server 配置进行编辑。
-
在服务器配置中,包含
keystore
元素的generate-self-signed-certificate-host
属性。 - 将服务器证书的主机名指定为值。
- 保存对您的配置的更改。
生成的密钥存储配置
XML
<server xmlns="urn:infinispan:server:13.0"> <security> <security-realms> <security-realm name="GeneratedKeystore"> <server-identities> <ssl> <!-- Generates a keystore that includes a self-signed certificate with the specified hostname. --> <keystore path="server.p12" relative-to="infinispan.server.config.path" password="secret" alias="server" generate-self-signed-certificate-host="localhost"/> </ssl> </server-identities> </security-realm> </security-realms> </security> </server>
JSON
{ "server": { "security": { "security-realms": [{ "name": "GeneratedKeystore", "server-identities": { "ssl": { "keystore": { "alias": "server", "generate-self-signed-certificate-host": "localhost", "path": "server.p12", "password": "secret" } } } }] } } }
YAML
server: security: securityRealms: - name: "GeneratedKeystore" serverIdentities: ssl: keystore: alias: "server" generateSelfSignedCertificateHost: "localhost" path: "server.p12" password: "secret"
6.1.2. 配置 TLS 版本和密码套件
当使用 SSL/TLS 加密来保护部署时,您可以将 Data Grid 服务器配置为使用特定的 TLS 协议版本以及协议中的特定密码套件。
流程
- 打开 Data Grid Server 配置进行编辑。
-
将
engine
元素添加到 Data Grid Server 的 SSL 配置中。 将 Data Grid 配置为使用具有
enabled-protocols
属性的一个或多个 TLS 版本。Data Grid Server 默认支持 TLS 版本 1.2 和 1.3。如果正确设置了
TLSv1.3
,则只为了限制客户端连接的安全协议。数据网格不建议启用TLSv1.1,
因为它是支持有限的旧协议,并提供弱的安全性。您应该不会启用任何比 1.1 旧的 TLS 版本。警告如果您修改 Data Grid Server 的 SSL
引擎
配置,则必须使用enabled-protocols
属性显式配置 TLS 版本。省略enabled-protocols
属性允许任何 TLS 版本。<engine enabled-protocols="TLSv1.3 TLSv1.2" />
将 Data Grid 配置为使用
enabled-ciphersuites
属性(用于 TLSv1.2 及以下)以及enabled-ciphersuites-tls13
属性(用于 TLSv1.3)的一个或多个加密套件。您必须确保设置支持计划使用的任何协议功能的密码套件,例如
HTTP/2 ALPN
。- 保存对您的配置的更改。
SSL 引擎配置
XML
<server xmlns="urn:infinispan:server:13.0"> <security> <security-realms> <security-realm name="default"> <server-identities> <ssl> <keystore path="server.p12" relative-to="infinispan.server.config.path" password="secret" alias="server"/> <!-- Configures Data Grid Server to use specific TLS versions and cipher suites. --> <engine enabled-protocols="TLSv1.3 TLSv1.2" enabled-ciphersuites="TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256" enabled-ciphersuites-tls13="TLS_AES_256_GCM_SHA384"/> </ssl> </server-identities> </security-realm> </security-realms> </security> </server>
JSON
{ "server": { "security": { "security-realms": [{ "name": "default", "server-identities": { "ssl": { "keystore": { "alias": "server", "path": "server.p12", "password": "secret" }, "engine": { "enabled-protocols": ["TLSv1.3"], "enabled-ciphersuites": "TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256", "enabled-ciphersuites-tls13": "TLS_AES_256_GCM_SHA384" } } } }] } } }
YAML
server: security: securityRealms: - name: "default" serverIdentities: ssl: keystore: alias: "server" path: "server.p12" password: "secret" engine: enabledProtocols: - "TLSv1.3" enabledCiphersuites: "TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256" enabledCiphersuitesTls13: "TLS_AES_256_GCM_SHA384"