stunnel 问题 SSL3_GET_ERROR / SSL23_GET_SERVER_HELLO

stunnel 问题 SSL3_GET_ERROR / SSL23_GET_SERVER_HELLO

我已将 Stunnel 设置为 Redhat Enterprise Linux 7.2 中 googlemmil 的 SSL 包装器。

stunnel.conf:

output = /var/log/stunnel.log
cert = /etc/pki/tls/certs/2019stunnel.pem
client = yes
sslVersion = TLSv1
;fips=no
[ssmtp]
accept = 1925
connect=smtp.googlemail.com:587

让我先好好的愣住一下。

我按照 Redhat 上的说明创建了文件 2019stunnel.pem:

在正确的目录中创建 2019stunnel.pem (certs)

现在我尝试 telnet localhost 1925;我得到了连接,但仅此而已。telnet smtp.googlemail 587 运行良好,我得到了连接,所以我认为这不是防火墙问题。

我检查了 sslVersion = TLSv1 和 sslVersion = all,这导致 stunned.log 中出现不同的错误:

Service [ssmtp] accepted connection from 127.0.0.1:49723
2019.01.04 14:45:01 LOG3[4500:140416608397056]: connect_blocking: connect 2a00:1450:400c:c0c::10:587: Network is unreachable (101)
2019.01.04 14:45:01 LOG5[4500:140416608397056]: connect_blocking: connected 74.125.140.16:587
2019.01.04 14:45:01 LOG5[4500:140416608397056]: Service [ssmtp] connected remote server from 192.168.178.57:44246
2019.01.04 14:45:01 LOG3[4500:140416608397056]: SSL_connect: 140770FC: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
2019.01.04 14:45:01 LOG5[4500:140416608397056]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2019.01.04 14:54:24 LOG5[4500:140416608249920]: Terminated

或者

Service [ssmtp] accepted connection from 192.168.178.57:57612
2019.01.04 14:54:36 LOG5[7437:139957105055488]: connect_blocking: connected 173.194.76.16:587
2019.01.04 14:54:36 LOG5[7437:139957105055488]: Service [ssmtp] connected remote server from 192.168.178.57:52192
2019.01.04 14:54:36 LOG3[7437:139957105055488]: SSL_connect: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
2019.01.04 14:54:36 LOG5[7437:139957105055488]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket

现在打开 SSL:

Openssl 输出:

openssl s_client -connect localhost:1925
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1546610402
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

我在这里错过了什么;什么地方运行出错了?

答案1

stunnel 创建到指定服务器的 TCP 连接,然后立即地尝试升级到 TLS。但端口 587 不期望立即使用 TLS:相反,它期望在普通 TCP 连接上使用 SMTP,并且只有在 STARTTLS 命令及其成功回复后,套接字才会升级到 TLS。这就是为什么简单方法openssl s_client无法工作的smtp.googlemail.com:587原因,就像它无法工作在您的 stunnel 中一样。

如果您想要立即使用 TLS,请使用端口 465 (smtps),​​而不是 587 (提交)。如果您想继续使用端口 587,则必须protocol smtp在 stunnel 配置中指定,以便 stunnel 知道 TLS 仅在 STARTTLS 之后启动。

相关内容