我正在尝试在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
这里有什么问题?
答案 0 :(得分:1)
您应将checkHost = 172.30.12.28:6390
替换为checkIP = 172.30.12.28
。
checkHost
选项检查指定的DNS主机名或通配符是否与对等证书的SAN或CN字段中提供的任何主机名或通配符匹配。
要检查IP地址,必须使用checkIP
选项。
内部隧道使用 OpenSSL 的X509_check_host
和X509_check_ip_asc
函数。这是他们的description。
答案 1 :(得分:0)
checkHost = <value>
检查对等证书主题中的CN是否与<value>
对应。根据日志,证书中的CN为172.30.12.120
。因此,您应将客户端配置更改为checkHost = 172.30.12.120
。
这可能会有效,但我不确定您的TLS配置是否经过深思熟虑。
看起来您没有进行客户端身份验证,因此您可以从客户端配置中删除cert
。此外,如果您在客户端计算机上拥有服务器证书,则可以使用&#34;证书锁定技术&#34;:删除checkHost
选项并将verifyChain
替换为verifyPeer = yes
。客户端计算机上的stunnel.pem
必须与服务器上的stunnel.pem
相同。
Stunnel documentation contains some simple examples for this.