求基于Spring Data Redis的LettuceConnectionFactory连接SSL启用的ElastiCache集群示例
连接启用SSL的ElastiCache Redis集群(Spring Data Redis + Lettuce)
最近刚帮几个项目搞定了这类场景的连接配置,给你整理两个实际跑通的方案,涵盖手动配置类和Spring Boot自动配置两种方式,还有关键注意事项。
1. 手动Java配置类实现
如果需要更灵活的控制(比如自定义SSL上下文逻辑),可以写一个配置类:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import java.io.InputStream; import java.security.KeyStore; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; @Configuration public class RedisClusterConfig { @Bean public LettuceConnectionFactory lettuceConnectionFactory() throws Exception { // 替换成你的ElastiCache集群配置端点(格式:xxx.cache.amazonaws.com:6379) RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration("your-elasticache-cluster-endpoint:6379"); // 配置SSL上下文:导入AWS根证书(如果本地/JDK未信任的话) CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); // 把下载的AmazonRootCA1.pem放在resources目录下 InputStream certStream = getClass().getResourceAsStream("/AmazonRootCA1.pem"); X509Certificate awsRootCert = (X509Certificate) certFactory.generateCertificate(certStream); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); trustStore.setCertificateEntry("aws-root-cert", awsRootCert); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); // 构建启用SSL的Lettuce客户端配置 LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() .useSsl() .sslContext(sslContext) .build(); return new LettuceConnectionFactory(clusterConfig, clientConfig); } }
简化版SSL配置(如果JDK已信任AWS根证书)
如果你的应用运行在AWS内部环境(比如EC2、EKS),或者使用的是较新版本的JDK(AmazonRootCA1已默认加入信任库),可以直接简化SSL配置:
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder() .useSsl() .build();
2. Spring Boot自动配置(更简洁)
如果用Spring Boot,直接在配置文件里配置即可,无需写配置类:
application.yml 示例
spring: data: redis: cluster: nodes: your-elasticache-cluster-endpoint:6379 # 替换为你的集群端点 ssl: true lettuce: ssl: trust-store: classpath:AmazonRootCA1.pem trust-store-type: PEM trust-store-password: "" # PEM格式证书不需要密码
application.properties 示例
spring.data.redis.cluster.nodes=your-elasticache-cluster-endpoint:6379 spring.data.redis.ssl=true spring.data.redis.lettuce.ssl.trust-store=classpath:AmazonRootCA1.pem spring.data.redis.lettuce.ssl.trust-store-type=PEM spring.data.redis.lettuce.ssl.trust-store-password=
3. 必看注意事项
- 集群端点选择:一定要用ElastiCache集群的配置端点,而不是单个节点的端点,配置端点会自动帮你发现集群内的所有节点。
- 证书获取:如果需要手动导入证书,去AWS官方下载AmazonRootCA1根证书即可,本地测试时必须配置,AWS内部环境通常可以省略。
- 依赖兼容性:推荐使用Spring Boot 2.7.x或3.x版本,对应的Spring Data Redis和Lettuce版本对SSL集群的支持更稳定。
- 网络权限:确保ElastiCache的安全组允许你的应用所在VPC/EC2/EKS的IP访问6379端口(SSL默认端口)。
内容的提问来源于stack exchange,提问作者Deepshikha
相关产品推荐
相关产品推荐

