开启redis tls支持

1,318 阅读2分钟

最近因项目需要,第三方组件需要加tls支持,记录一下。

官网的step by step说明的也比较清楚,redis版本需要redis 6支持,我们安装的的redis6.0.8版本。TLS,这是一项可选功能,需要在编译时启用。

环境 centos7

redis安装

下载redis6.0.8的安装包,解压安装包,运行make BUILD_TLS = yes。

make过程中可能出现的问题:

  1. 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。这是因为上次的编译失败,有残留的文件,我们需要清理下,然后重新编译就可以了。

  2. 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

  3. "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");
    }
}