Мы создали хранилище ключей и хранилище доверенных сертификатов для использования с нашим клиентом Redisson. и используйте это следующим образом:
Код: Выделить всё
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() throws MalformedURLException {
File truststore = new File("docker/certs/truststore.jks");
File keystore = new File("docker/certs/redis_key_store.p12");
Config config = new Config();
//SingleServerConfig singleServerConfig = config.useSingleServer();
ReplicatedServersConfig elasticacheServersConfig = config.useReplicatedServers();
elasticacheServersConfig
.setSslProtocols(new String[]{"TLSv1.3"})
.setSslCiphers(new String[] { "TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256", "TLS_AES_128_GCM_SHA256" })
.setSslEnableEndpointIdentification(false)
.setSslKeystorePassword("password")
.setSslKeystore(keystore.toURI().toURL())
.setSslTruststorePassword("password")
.setSslTruststore(truststore.toURI().toURL())
.setPassword("password");
redisEndpoints()
.stream()
.map(endpoint -> "rediss://" + endpoint.getAddress() + ":" + endpoint.getPort())
.forEach(elasticacheServersConfig::addNodeAddress);
return Redisson.create(config);
}
Когда я используйте то же хранилище доверенных сертификатов и хранилище ключей в салате, это подключается без проблем. Код для этого такой:
Код: Выделить всё
@Bean
public RedisConnectionFactory redisConnectionFactory() {
File truststore = new File("docker/certs/truststore.jks");
File keystore = new File("docker/certs/redis_key_store.p12");
var endpoint = new Endpoint().withAddress("127.0.0.1").withPort(63798);
final RedisStandaloneConfiguration redisStandaloneConfiguration =
new RedisStandaloneConfiguration(endpoint.getAddress(), endpoint.getPort());
redisStandaloneConfiguration.setPassword("password");
final LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration
.builder()
.readFrom(ReadFrom.MASTER_PREFERRED)
.commandTimeout(Duration.of(5000, ChronoUnit.MILLIS))
.clientOptions(ClientOptions.builder()
.socketOptions(SocketOptions.builder()
.keepAlive(true)
.build())
.sslOptions(SslOptions.builder()
.keystore(keystore, "password".toCharArray())
.truststore(truststore, "password")
.build())
.build());
builder.useSsl().disablePeerVerification();
return new LettuceConnectionFactory(redisStandaloneConfiguration, builder.build());
}
Код: Выделить всё
var connection = redisConnectionFactory.getConnection();
connection.set("test".getBytes(), "1".getBytes());
byte [] g = connection.get("test".getBytes());
connection.close();
К сожалению, нам приходится использовать Redisson из-за предлагаемой им службы исполнителя.
Подробнее здесь: https://stackoverflow.com/questions/779 ... ttuce-does