我在Terraform的测试环境中生成了一个自签名证书来保护Redis容器连接:
以下是我的资源:
resource "tls_private_key" "private_key" {
algorithm = "RSA"
}
resource "tls_self_signed_cert" "signed_cert" {
private_key_pem = tls_private_key.private_key.private_key_pem
ip_addresses = ["0.0.0.0", "127.0.0.1"]
validity_period_hours = 6
early_renewal_hours = 1
subject {
organization = "example"
}
allowed_uses = [
"key_encipherment",
"digital_signature",
"server_auth",
"client_auth",
"cert_signing"
]
}
下面是我的Dockerfile
:
FROM redis:alpine
RUN apk update && apk add ca-certificates && update-ca-certificates
COPY ./redis.conf /etc/redis.conf
COPY ./redis.crt /redis.crt
COPY ./redis.key /redis.key
CMD ["redis-server", "/etc/redis.conf"]
下面是我的redis.conf
文件:
requirepass "password"
port 0
tls-port 6379
tls-cert-file /redis.crt
tls-ca-cert-file /redis.crt
tls-key-file /redis.key
我对tls-ca-cert-file
和tls-cert-file
使用相同的文件,因为这是一个自签名证书,并且redis要求设置tls-ca-cert-file
。
现在,当我尝试使用redli
登录时,出现以下错误:
$ redli -a "password" --tls
... Dial x509: certificate signed by unknown authority
我错过了什么?
我还尝试使用redli
的--skipverify
标志,但没有结果:
$ redli -a password --tls --skipverify
... Dial remote error: tls: certificate required
1条答案
按热度按时间yjghlzjz1#
事实证明,Redis by default accepts only mutual authentication .
为了解决这个问题,我在
redis.conf
文件中添加了tls-auth-clients no
。我还更新了如何从Terraform生成证书:
现在我可以正确地连接
redli
:请查看
--skipverify
标志。由于ca授权,需要该标志:如果我想接受ca授权,我必须运行:
但是在我的Arch Linux中,在你的机器中,它可能是其他的东西。
在我的例子中,我为每个由github操作生成的EC2生成一个证书,该操作在PR打开时运行,因此我不能将每个证书添加到可信存储区。
我的
docker-compose.yaml
文件:我的
redis.conf
文件: