java - 使用 CName 从 Java 连接到加密的 ElastiCache Redis

标签 java ssl redis amazon-route53 amazon-elasticache

我正在使用来自 spring data 的 Lettuce 驱动程序连接到使用传输加密的 ElastiCache。当我尝试连接到分配给 ElastiCache 集群的 Route53 CName 时。我收到此错误:

Caused by: com.lambdaworks.redis.RedisException: Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host='my.cname.net', port=6379]]
    at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:507)
    at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:481)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterAsyncImpl(RedisClusterClient.java:335)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterAsync(RedisClusterClient.java:273)
    at org.springframework.data.redis.connection.lettuce.LettuceClusterConnection.doGetAsyncDedicatedConnection(LettuceClusterConnection.java:1250)
    at org.springframework.data.redis.connection.lettuce.LettuceConnection.getAsyncDedicatedConnection(LettuceConnection.java:3466)
    at org.springframework.data.redis.connection.lettuce.LettuceConnection.getDedicatedConnection(LettuceConnection.java:3487)
    at org.springframework.data.redis.connection.lettuce.LettuceConnection.getConnection(LettuceConnection.java:3460)
    at org.springframework.data.redis.connection.lettuce.LettuceConnection.sMembers(LettuceConnection.java:1998)
    ... 24 common frames omitted

这是我用来连接的代码:

@Bean
public static RedisConnectionFactory connectionFactory() {
    Map<String, Object> source = Maps.newHashMap();
    source.put("spring.redis.cluster.nodes", "my.cname.net:6379");
    RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration(new MapPropertySource("RedisClusterConfiguration", source));
    clusterConfiguration.setMaxRedirects(10);
    LettuceConnectionFactory factory = new LettuceConnectionFactory(clusterConfiguration);
    factory.setValidateConnection(false);
    factory.setUseSsl(true);
    return factory;
}

现在,当我将 Cname 替换为附加到 ElastiCache 集群的实际网络名称时,程序可以正常工作。有谁知道为什么程序仅在使用 Cname 时失败?

最佳答案

我们在 .NET 客户端上遇到了非常相似的问题。我认为问题是因为 Redis 端点用于 amazonaws.com 域的证书因此通过 my.cname.net 的 CName 连接到集群失败,因为该证书对该域无效。我们找不到任何更改证书的方法,因此无法解决该问题,不得不坚持在连接中使用实际的网络名称。

关于java - 使用 CName 从 Java 连接到加密的 ElastiCache Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52166573/

相关文章:

java正则表达式匹配&[文本]

java - 无法调用正确的数据

security - 是 'safe'永久信任Fiddler根证书吗?

python - 由于 ssl 的某些原因,pip3 无法安装任何东西

c# - 使用服务堆栈限制 Redis 消息队列的执行

java - Apache 弗林克 : How are failures handled in the DataSet API?

java - 如何将负字节值转换为短整数或整数?

java - SSL 问题 java web 应用程序

redis - 从 redis-py 执行自定义 redis 命令

database - 与基于磁盘的 NoSQL 数据库相比,内存数据库的主要性能优势是什么?