springboot通过ssl连接redis

springboot通过ssl连接redis

1:先确认工程使用的是否是spring提供的RedisTemplate,该文章是基于org.springframework.data.redis.core.RedisTemplate来讲解的

2:把redis升级为通过ssl连接
> 参考:https://blog.csdn.net/Exception_sir/article/details/122047071
> 
> #解压
> tar -zxvf redis-6.2.6.tar.gz -C /opt
> 
> #进入/opt/redis-6.2.6/目录下进行编译安装
> cd /opt/redis-6.2.6/
> 
> #要建立TLS通信,则必须要使用TLS支持进行构建,需要OpenSSL开发库
> make MALLOC=libc BUILD_TLS=yes
> 
> #如果make报错,则需要先安装
> yum install openssl-devel 
> yum -y install gcc gcc-c++ kernel-devel
> 
> #make时还可能会报如下错误:
> cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
> cc: error: ../deps/lua/src/liblua.a: No such file or directory
> cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
> make: *** [redis-server] Error 1
> 分别进入redis下的deps下的hiredis、lua 运行make
> 注意:jemalloc下可能要先运行./configure,然后make
> 回到src目录运行 make
> 还不行就把redis的解压包删了,重新解压再make
> 
> #构建编译执行完成后,进行指定目录安装,将启动bin目录指定安装到/opt/redis 目录
> make PREFIX=/opt/redis install
> 
> #添加环境变量
> echo 'PATH=/opt/redis/bin:$PATH' >> /etc/profile
> source /etc/profile
> 
> #添加配置redis文件
> mkdir -p /opt/redis/conf
> 
> #将自定义的配置文件上传到 /opt/redis/conf目录下,下方可参考个人使用的配置文件
> #为防止redis启动存在警告添加系统配置参数
> echo vm.overcommit_memory = 1 >> /etc/sysctl.conf;
> sysctl -p
> 
> #分别创建日志存放目录及数据目录
> mkdir -p /opt/redis/logs
> mkdir -p /opt/redis/data
> 
> #创建证书存放目录
> mkdir -p /opt/redis/ssl
> 
> #分别生成CA证书及客户端证书,key等文件(openssl命令详解https://www.junmajinlong.com/linux/index/#blogopenssl)
> #生成4096位没有密码的RSA私有密钥
> openssl genrsa -out ca.key 4096
> #-x509:生成一个自签证书   -nodes:禁止对私钥进行加密  -sha256:使用sha256算法  -key:指定私钥的输入文件   -days:证书有效日期    -subj:替换或自定义证书请求时需要输入的信息,并输出修改后的请求信息       -out:证书请求或自签署证书的输出文件
> openssl req -x509 -new -nodes -sha256 -key ca.key -days 3650 -subj '/O=Redis Test/CN=Certificate Authority' -out ca.crt
> #生成2048位没有密码的RSA私有密钥
> openssl genrsa -out redis.key 2048
> #先生成一个使用sha256算法加密的自签证书,将其作为redis.crt的输入    openssl x509:主要用于输出证书信息,也能够签署证书请求文件、自签署、转换证书格式等   -days:证书有效期    -CA:指定签署时所使用的CA证书。该选项一般和"-req"选项一起使用,用于为证书请求文件签署     -CAkey:设置CA签署时使用的私钥文件    -CAserial:设置CA使用的序列号文件    -CAcreateserial:当使用该选项时,如果CA使用的序列号文件不存在将自动创建 
> openssl req -new -sha256 -key redis.key -subj '/O=Redis Test/CN=Server' | openssl x509 -req -sha256 -CA ca.crt -CAkey ca.key -CAserial ca.txt -CAcreateserial -days 365 -out redis.crt
> #生成长度为2048的交换协议文件      openssl dhparam:用于生成和管理dh文件。dh(Diffie-Hellman)是著名的密钥交换协议,或称为密钥协商协议,它可以保证通信双方安全地交换密钥   
> openssl dhparam -out redis.dh 2048
> 
> #启动服务
> cd /opt/redis/
> ./bin/redis-server ./conf/redis.conf
> 
> #测试通过ssl连接redis
> redis-cli --tls --cert /opt/redis/ssl/redis.crt --key /opt/redis/ssl/redis.key --cacert /opt/redis/ssl/ca.crt -p 6379
> 
> 
> 
> docker集群部署ssl的redis,配置文件可以共用上面二进制安装的
> docker service create --name redis -p 6380:6379 --no-resolve-image --network testnet --mount type=bind,src=/opt/redis/,dst=/opt/redis/ harbor/redis:6 redis-server /opt/redis/conf/redis.conf --requirepass password@2021; \
> 

3:代码适配

1)引入maven依赖
<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcpkix-jdk15on</artifactId>
</dependency>
<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk15on</artifactId>
</dependency>2)编写SSL工厂类
import javax.net.ssl.SSLSocketFactory;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMDecryptorProvider;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
import org.springframework.core.io.ClassPathResource;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值