1

我正在尝试在 Windows 中使用 REDIS 设置 stunnel。安装 stunnel 和 redis 后,我在服务器和客户端模式下进行了以下配置:

客户端机器配置:

[redis-stunnel]
client = yes
cert = stunnel.pem
accept = 127.0.0.1:6379
connect = 172.30.12.28:6390
verifyChain = yes
CAfile = stunnel.pem
checkHost = 172.30.12.28:6390
OCSPaia = yes 

服务器机器配置:

[redis-stunnel-server]
accept  = 6380
connect = 6379
cert = stunnel.pem

配置加载成功,但是当我尝试从客户端机器连接到端口号:6379 时,我收到以下错误:

Service [redis-stunnel] connected remote server from 172.30.12.120:65484
2018.03.19 21:03:41 LOG4[229]: CERT: No matching host name found
2018.03.19 21:03:41 LOG4[229]: Rejected by CERT at depth=0: C=IN, ST=KARNATAKA, L=BANGALORE, O=AHC, OU=healthcare, CN=172.30.12.120
2018.03.19 21:03:41 LOG3[229]: SSL_connect: 14090086: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
2018.03.19 21:03:41 LOG5[229]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket

这里有什么问题?

4

2 回答 2

1

您应该替换checkHost = 172.30.12.28:6390checkIP = 172.30.12.28.

checkHost选项检查指定的 DNS 主机名或通配符是否与对等证书的 SAN 或 CN 字段中提供的任何匹配。

要检查 IP 地址,必须使用checkIP选项。

在引擎盖下stunnel使用OpenSSLX509_check_hostX509_check_ip_asc功能。这是他们的描述

于 2020-02-14T10:08:29.107 回答
0

checkHost = <value>检查对等证书主题中的 CN 是否对应于<value>. 根据日志,证书中的 CN 为172.30.12.120. 因此,您应该将客户端配置更改为checkHost = 172.30.12.120.

尽管我不确定您的 TLS 配置是否经过深思熟虑,但这可能会使其工作。

看起来您没有进行客户端身份验证,因此您可以cert从客户端配置中删除。此外,如果您在客户端计算机上有服务器证书,则可以使用“证书固定技术”:删除该checkHost选项并替换verifyChainverifyPeer = yes. 并且stunnel.pem在客户端机器上必须与stunnel.pem服务器上相同。

Stunnel 文档包含一些简单的示例。

于 2018-06-13T12:30:33.280 回答