#!/bin/bash # Generate some test certificates which are used by the regression test suite: # # tests/tls/ca.{crt,key} Self signed CA certificate. # tests/tls/redis.{crt,key} A certificate with no key usage/policy restrictions. # tests/tls/client.{crt,key} A certificate restricted for SSL client usage. # tests/tls/server.{crt,key} A certificate restricted for SSL server usage. # tests/tls/redis.dh DH Params file. generate_cert() { local name=$1 local cn="$2" local opts="$3" local keyfile=tests/tls/${name}.key local certfile=tests/tls/${name}.crt [ -f $keyfile ] || openssl genrsa -out $keyfile 2048 openssl req \ -new -sha256 \ -subj "/O=Redis Test/CN=$cn" \ -key $keyfile | \ openssl x509 \ -req -sha256 \ -CA tests/tls/ca.crt \ -CAkey tests/tls/ca.key \ -CAserial tests/tls/ca.txt \ -CAcreateserial \ -days 365 \ $opts \ -out $certfile } mkdir -p tests/tls [ -f tests/tls/ca.key ] || openssl genrsa -out tests/tls/ca.key 4096 openssl req \ -x509 -new -nodes -sha256 \ -key tests/tls/ca.key \ -days 3650 \ -subj '/O=Redis Test/CN=Certificate Authority' \ -out tests/tls/ca.crt cat > tests/tls/openssl.cnf <<_END_ [ server_cert ] keyUsage = digitalSignature, keyEncipherment nsCertType = server [ client_cert ] keyUsage = digitalSignature, keyEncipherment nsCertType = client _END_ generate_cert server "Server-only" "-extfile tests/tls/openssl.cnf -extensions server_cert" generate_cert client "Client-only" "-extfile tests/tls/openssl.cnf -extensions client_cert" generate_cert redis "Generic-cert" [ -f tests/tls/redis.dh ] || openssl dhparam -out tests/tls/redis.dh 2048