You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:16:40