第 4 章 配置 TLS/SSL 加密
您可以通过配置包含 Data Grid 公钥的密钥存储来保护使用 SSL/TLS 加密的数据网格服务器连接。如果需要 mutual TLS,您还可以配置客户端证书身份验证。
4.1. 配置 Data Grid 服务器密钥存储
将密钥存储添加到 Data Grid 服务器,并将它配置为提供验证客户端身份的 SSL/TLS 证书。如果安全域包含 TLS/SSL 身份,它会加密到使用该安全域的 Data Grid 服务器端点的任何连接。
先决条件
- 为 Data Grid 服务器创建一个包含证书或证书链的密钥存储。
Data Grid 服务器支持以下密钥存储格式:JKS、JCEKS、PKCS12/PFX 和 PEM。如果存在 Bouncy Castle 库,则也支持 BKS、BCFKS 和 UBER。
证书应包含类型为 dNSName
和/或 iPAddress
的 subjectAltName
扩展,以便客户端可以根据 RFC 2818 规格定义的规则正确执行主机名验证。如果使用不包括此类扩展的证书启动,服务器将发出警告。
在生产环境中,服务器证书应由受信任的证书颁发机构( Root 或 Intermediate CA)签名。
如果以下两者都包含,您可以使用 PEM 文件作为密钥存储:
- PKCS1/ 或 PKCS""8 格式的私钥。
- 一个或多个证书。
您还应该使用空密码配置 PEM 文件密钥存储(password=""
)。
流程
- 打开 Data Grid Server 配置以进行编辑。
-
将包含 Data Grid 服务器的 SSL/TLS 身份的密钥存储添加到
$RHDG_HOME/server/conf
目录中。 -
在 Data Grid Server 安全域中添加
server-identities
定义。 -
使用
path
属性指定密钥存储文件名。 -
使用
keystore-password
和alias
属性提供密钥存储密码和证书别名。 - 保存对配置的更改。
后续步骤
使用信任存储配置客户端,以便它们能够验证 Data Grid 服务器的 SSL/TLS 身份。
密钥存储配置
XML
<server xmlns="urn:infinispan:server:15.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"
4.1.1. SSL/TLS 证书轮转
SSL/TLS 证书具有过期日期,之后它们已不再有效。续订证书的过程也称为"轮转"。网格监控密钥存储文件是否有变化,并在不需要服务器或客户端重启的情况下自动重新载入它们。
要在证书轮转过程中确保无缝操作,请使用由证书颁发机构(CA)签名的证书,并使用 CA 证书配置服务器和客户端信任存储。使用自签名证书将导致临时握手失败,直到所有客户端和服务器都已更新。
其他资源
4.1.2. 生成 Data Grid 服务器密钥存储
配置 Data Grid 服务器,以在启动时自动生成密钥存储。
自动生成的密钥存储:
- 不应该在生产环境中使用。
- 在需要时会生成 ;例如,从客户端获取第一个连接时。
- 包含您可以在 Hot Rod 客户端中直接使用的证书。
流程
- 打开 Data Grid Server 配置以进行编辑。
-
在服务器配置中包含
keystore
元素的generate-self-signed-certificate-host
属性。 - 指定服务器证书的主机名作为值。
- 保存对配置的更改。
生成的密钥存储配置
XML
<server xmlns="urn:infinispan:server:15.0"> <security> <security-realms> <security-realm name="generated-keystore"> <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": "generated-keystore", "server-identities": { "ssl": { "keystore": { "alias": "server", "generate-self-signed-certificate-host": "localhost", "path": "server.p12", "password": "secret" } } } }] } } }
YAML
server: security: securityRealms: - name: "generated-keystore" serverIdentities: ssl: keystore: alias: "server" generateSelfSignedCertificateHost: "localhost" path: "server.p12" password: "secret"
4.1.3. 配置 TLS 版本和密码套件
当使用 SSL/TLS 加密来保护部署时,您可以将 Data Grid 服务器配置为使用 TLS 协议的特定版本以及协议中的特定加密套件。
流程
- 打开 Data Grid Server 配置以进行编辑。
-
将
engine
元素添加到 Data Grid 服务器的 SSL 配置中。 将 Data Grid 配置为使用带有
enabled-protocols
属性的一个或多个 TLS 版本。默认情况下,Data Grid 服务器支持 TLS 版本 1.2 和 1.3。如果适当,您可以设置
TLSv1.3
仅来限制客户端连接的安全协议。网格不推荐启用TLSv1.1
,因为它是支持有限且提供弱安全性的旧协议。您不应该启用任何早于 1.1 的 TLS 版本。警告如果您修改了 Data Grid 服务器的 SSL
引擎
配置,则必须使用enabled-protocols
属性显式配置 TLS 版本。省略enabled-protocols
属性允许任何 TLS 版本。<engine enabled-protocols="TLSv1.3 TLSv1.2" />
将 Data Grid 配置为使用带有
enabled-ciphersuites
属性(TLSv1.2 和 below)和enabled-ciphersuites-tls13
属性(用于 TLSv1.3)的一个或多个密码套件。您必须确保设置了支持您计划使用的任何协议功能的密码套件;例如
HTTP/2 ALPN
。- 保存对配置的更改。
SSL 引擎配置
XML
<server xmlns="urn:infinispan:server:15.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_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" enabled-ciphersuites-tls13="TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"/> </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_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", "enabled-ciphersuites-tls13": "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256" } } } }] } } }
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"