我已将 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 之后启动。