如何在Ignite SSL配置XML中加密存储keyStorePassword与trustStorePassword
Ignite SSL配置密码加密存储解决方案
有两种成熟的可行方案可以实现keyStorePassword和trustStorePassword的加密存储,无需在XML中明文写入密码:
方案1:扩展原生SslContextFactory实现解密
直接继承Ignite官方提供的SslContextFactory,重写密码设置方法,在内部完成加密密码的解密逻辑即可:
- 首先编写自定义SSL上下文工厂类,内置解密逻辑:
import org.apache.ignite.ssl.SslContextFactory; public class EncryptedSslContextFactory extends SslContextFactory { // 解密密钥建议从环境变量、保密配置中心读取,不要硬编码在代码中 private static final String DECRYPT_KEY = System.getenv("IGNITE_SSL_DECRYPT_KEY"); @Override public void setKeyStorePassword(String encryptedPwd) { // 调用自定义对称解密工具类,把密文解密为明文 String plainPwd = AESUtil.decrypt(encryptedPwd, DECRYPT_KEY); super.setKeyStorePassword(plainPwd.toCharArray()); } @Override public void setTrustStorePassword(String encryptedPwd) { String plainPwd = AESUtil.decrypt(encryptedPwd, DECRYPT_KEY); super.setTrustStorePassword(plainPwd.toCharArray()); } }
- 修改XML配置,替换为自定义工厂类,密码字段填写加密后的密文:
<property name="sslContextFactory"> <bean class="com.yourcompany.config.EncryptedSslContextFactory"> <property name="keyStoreFilePath" value="keystore/node.jks"/> <property name="keyStorePassword" value="这里填AES加密后的密文"/> <property name="trustStoreFilePath" value="keystore/trust.jks"/> <property name="trustStorePassword" value="这里填AES加密后的密文"/> <property name="protocol" value="TLSv1.3"/> </bean> </property>
方案2:结合Spring配置加密能力
如果你的项目是基于Spring/Spring Boot加载Ignite配置,可以直接使用Jasypt等Spring生态的加密工具:
- 引入Jasypt依赖后,把加密后的密码以
ENC(密文)格式存入Spring配置文件 - XML配置直接引用解密后的属性即可,Spring会自动完成解密注入:
<property name="keyStorePassword" value="${ignite.ssl.key-store-password}"/> <property name="trustStorePassword" value="${ignite.ssl.trust-store-password}"/>
注意事项
- 解密密钥禁止和配置文件存放在同一位置,生产环境建议存储在操作系统环境变量、K8s Secret、内部保密配置中心等位置
- 加密算法使用成熟的AES、SM4等标准对称加密算法即可,不要自行实现加密逻辑
- 以上方案适配Apache Ignite 2.x全系列版本,无需修改核心依赖
内容的提问来源于stack exchange,提问作者Stas Shvarzman
相关产品推荐
相关产品推荐

