Spring集成Redis中禁用主机名DNS检测
问题
最近使用ssh隧道代理redis服务器。在Spring中正常配置了ssl方式连接redis后,出现了如下错误:
Caused by: java.security.cert.CertificateException: No subject alternative DNS name matching localhost found.
Spring连接redis配置如下:
spring: # redis 配置redis:# 地址host: localhost# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password: xxxx# 连接超时时间timeout: 10slettuce:pool:# 连接池中的最小空闲连接min-idle: 0# 连接池中的最大空闲连接max-idle: 8# 连接池的最大数据库连接数max-active: 8# #连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1msssl: true
解决
配置一个redis类,将禁用DNS检测,内容如下:
package com.xxx.web.core.config;import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RedisSslConfig {@Beanpublic LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() {return builder -> builder.useSsl().disablePeerVerification(); // <== 禁用主机名校验 生产和UAT环境不能使用该配置}
}
注意,这是老版本的Spring就只能这样配置了。生产环境是不会存在这样的问题的,生产环境可以直接访问redis集群的,这里只是为了解决开发环境SSH隧道代理Redis集群问题。
总结
我这里是老Spring版本配置而已。
参考
- Class LettuceClientConfiguration.LettuceSslClientConfigurationBuilder