套接字之间的双工管道似乎在 NAT 后面中继 TLS 以进行 SMTP,但只是有时
Duplex pipe between sockets seems to relay TLS behind NAT for SMTP but only sometimes
这是设置:
[Proxy/Relay Server] <---------[(SMTP TLS test client) Test server]
^
|
(Internet) v
--------------+-----------------
|
[Router]
|
|
[ Home email appliance machine
|
(Home email server app (Node.js))
|
(Postfix) ]
所以这个小服务器在家里的NAT后面。外部服务器用作 IMAP 和 SMTP 的代理/中继。
- 家用电子邮件设备应用程序连接到互联网上的代理/中继服务器。
- 家庭电子邮件设备应用程序连接到本地主机上的 SMTP 后缀端口。
- 家庭电子邮件应用程序在两个连接之间创建双向管道。
- 从互联网上的测试服务器,将支持 TLS 的 SMTP 客户端连接到代理/中继服务器。
- 代理/中继服务器从家庭电子邮件设备在代理连接和预先存在的连接之间传输数据。
- SMTP 客户端执行 STARTTLS 协议。
- 家庭电子邮件设备应用程序通过管道在代理/中继和本地主机 SMTP 之间传输数据,以通过 TLS 执行 SMTP。
我们使用openssl s_client来测试与代理/中继服务器的TL连接,该代理/中继服务器将数据来回传输到NAT后面的客户端。
它适用于纯文本,但我不确定它是否始终适用于 TLS。偶尔我会从 openssl s_client命令中获得带有 SSL 证书等的完整输出,但通常它只是说 CONNECTED 并坐在那里。不确定它在这些情况下是否有效。
基本上,它的代码在带有Postfix的计算机上的NAT(路由器)后面运行(有一些安全的东西,但基本上就是这样):
proxyOutgoing = net.connect(proxyport, proxyhost)
localSMTP = net.connect(587, 'localhost')
localSMTP.pipe(proxyOutgoing).pipe(localSMTP)
我想弄清楚的是,这个基本想法是否会导致openssl s_client测试或TLS通常只是偶尔"工作"?我需要以某种方式冲洗管道或奇怪的东西吗?它一直说已连接(000003),但通常只是这样,没有证书信息。
一种理论是 tlsmgr 正在缓存会话,这就是为什么自从它已经设置好以来我没有看到 STARTTLS 的东西。
感谢任何有意见或想法的人。
答案基本上是步骤 2 需要在步骤 4 之后出现,否则不会收到来自本地 SMTP/IMAP 服务器的初始响应,并且 STARTTLS 协议测试客户端不起作用,因为它们正在等待连接上的标准问候语。 起初,本地邮件服务器早期连接到的原始顺序似乎有效,因为明文SMTP命令后来通过,但通常客户端希望在连接时收到某些邮件。
相关文章:
- JavaScript通过SMTP验证电子邮件
- 通过SSL/TLS连接访问Vagrant上的Node.js应用程序
- 使用自定义 SMTP 通过 JavaScript 发送电子邮件
- 使用TLS时出现WebSocket错误(但并非没有)
- 如何在Node.js中创建TLS隧道
- 如何使用API从SMTP服务器访问和提取电子邮件
- SMTP 服务器给出错误.邮件未在流星应用程序中发送
- 套接字之间的双工管道似乎在 NAT 后面中继 TLS 以进行 SMTP,但只是有时
- 检测浏览器是否启用了 TLS
- NodeJs 将“net”套接字转换为基于 SSL/TLS 的套接字
- 使用 TLS (SSL) 从闪存 v11+ 连接到 nodejs
- 如何在客户端和服务器位置都是动态时通过 TLS 运行 C# Websockets
- 避免在 TLS 客户端中发送TLS_EMPTY_RENEGOTIATION_INFO_SCSV密码 你好
- 无法关闭/结束 TLS 连接
- node.js检查有效负载标头是否包含预定义的字符序列,protocol-TLS
- "现在无法切换到旧模式“-tls.connect函数中出现Node.JS apn模块错误
- 发送邮件时,Sendgrid SMTP API未替换替换标记
- TLS WebSocket服务器与firefox客户端一起工作,但不与chrome客户端一起工作
- 'resumeSession'节点的事件'的TLS模块
- 浏览器对“数字集市”/“伪造”的支持程度如何?lib(原生JavaScript TLS实现)