如何配置JedisConnectionFactory使用SSL,这样就不会出现错误。"JedisDataException,ERR unencrypted connection is prohibited"?ERR 未加密连接被禁止"?

问题描述 投票:1回答:1

我有一个带有RLEC(RedisLabs企业集群)UI的Redis数据库,它已经被设置为SSL连接。

我有一个java应用程序,它能够使用Jedis连接到Redis数据库。

这可以工作。

Jedis jedis = new Jedis(redisInfo.getHost(), redisInfo.getPort(), useSsl);

// make the connection
jedis.connect();

// authorize with our password
jedis.auth(redisInfo.getPassword());

Env vars:

"-Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=iloveredis -Djavax.net.ssl.keyStore=$PWD/META-INF/clientKeyStore.p12 -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=iloveredis -Djavax.net.ssl.trustStore=$PWD/META-INF/clientTrustStore.jks"

我也有一个Spring Boot应用,我试图使用JedisConnectionFactory连接到Redis数据库,但我不能。 使用同一个应用程序,我能够连接到一个没有启用SSL的Redis db)。

在我的pom.xml中。

          <dependency>
              <groupId>org.springframework.data</groupId>
              <artifactId>spring-data-redis</artifactId>
              <version>2.1.4.RELEASE</version>
          </dependency>

          <dependency>
                 <groupId>redis.clients</groupId>
                 <artifactId>jedis</artifactId>
                 <version>2.9.0</version>
          </dependency>

在我的redis配置文件中

@Configuration
@EnableRedisRepositories
public class RedisConfig {

@Bean
JedisConnectionFactory jedisConnectionFactory() {
   RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
   redisConfig.setHostName(redisInfo.getHost());
   redisConfig.setPort(redisInfo.getPort());
   redisConfig.setPassword(RedisPassword.of(redisInfo.getPassword()));
   boolean useSsl = env.getProperty("spring.redis.ssl", Boolean.class);
   JedisClientConfiguration jedisConfig;
   if (useSsl) {
          jedisConfig = JedisClientConfiguration
                                                                              .builder()
                                                                              .useSsl()
                                                                              .build(); 
   } else {
          jedisConfig = JedisClientConfiguration
                              .builder()
                              .build();                  
   }
    JedisConnectionFactory jcf = new JedisConnectionFactory(redisConfig, jedisConfig); 

    return jcf;
}



@Bean
public RedisTemplate<?, ?> redisTemplateJedis() {
   final RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
   template.setConnectionFactory(jedisConnectionFactory());
    template.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
    return template;
}

这是我得到的错误信息

org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisDataException: ERR unencrypted connection is prohibited

还有一点是,出于测试目的,服务器和应用程序都使用自签名证书(与Jedis一起工作)。

我不知道如何配置JedisConfigurationFactory才不会出现这个错误。

spring-boot redis jedis spring-data-redis self-signed-certificate
1个回答
0
投票

我不得不打开 usePoolingJedisClientConfiguration.

© www.soinside.com 2019 - 2024. All rights reserved.