最近因项目需要,第三方组件需要加tls支持,记录一下。
官网的step by step说明的也比较清楚,redis版本需要redis 6支持,我们安装的的redis6.0.8版本。TLS,这是一项可选功能,需要在编译时启用。
环境 centos7
redis安装
下载redis6.0.8的安装包,解压安装包,运行make BUILD_TLS = yes。
make过程中可能出现的问题:
-
jemalloc/jemalloc.h: No such file or directory 解决方法:make distclean && make BUILD_TLS = yes
原因:一般是执行make 时遇到了错误(大部分是由于gcc未安装),然后我们安装好了gcc 后,我们再执行make ,这时就出现了jemalloc/jemalloc.h: No such file or directory。这是因为上次的编译失败,有残留的文件,我们需要清理下,然后重新编译就可以了。 -
server.c:3318:16: error: 'struct redisServer' has no member named 'loading' 解决方法:升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash -
"fatal error: openssl/ssl.h: No such file or directory"
解决方法:安装 OpenSSL 开发包
yum -y install openssl-devel
正常编译成功后,可以通过./utils/gen-test-certs.sh(安装包中自带)生成对应的证书和公私钥和证书。脚本很简单,就是通过openssl生成证书。生产环境中需要根据需求使用已有的证书并设置证书有效期。
tls验证
可以以手动方式运行来验证tls是否生效:
启动redis服务:
--tls-cert-file ./tests/tls/redis.crt \
--tls-key-file ./tests/tls/redis.key \
--tls-ca-cert-file ./tests/tls/ca.crt`
通过tls方式链接:
--cert ./tests/tls/redis.crt \
--key ./tests/tls/redis.key \
--cacert ./tests/tls/ca.crt
配置文件的方式,需要修改redis.conf下的TLS/SSL相关配置。
Java客户端链接
以jedis为例,jedis在3.2的版本支持tls的链接方式
jedis版本3.2.3:
截取jedis测试用例改造:
public class RedisDemo {
public static void main(String[] args) {
setupTrustStore();
Jedis jedis = new Jedis("rediss://192.168.2.140:6379");
String pong = jedis.ping();
System.out.println("ping result:" + pong);
jedis.close();
}
private static void setJvmTrustStore(String trustStoreFilePath, String trustStoreType) {
System.setProperty("javax.net.ssl.trustStore", trustStoreFilePath);
System.setProperty("javax.net.ssl.trustStoreType", trustStoreType);
}
private static void setupTrustStore() {
setJvmTrustStore("/Users/ningque/work/redis.jks", "jks");
}
}