我使用Postfix和Dovecot配置了一个SMTP邮件服务器。
当我尝试使用外部客户端通过TLS发送电子邮件时,我收到以下错误:
/var/log/syslog
:
Oct 31 19:40:49 designtuner postfix/submission/smtpd[30394]: connect from unknown[185.81.141.117]
Oct 31 19:40:49 designtuner postfix/submission/smtpd[30395]: connect from unknown[185.81.141.117]
Oct 31 19:40:49 designtuner postfix/submission/smtpd[30394]: lost connection after CONNECT from unknown[185.81.141.117]
Oct 31 19:40:49 designtuner postfix/submission/smtpd[30394]: disconnect from unknown[185.81.141.117] commands=0/0
Oct 31 19:40:49 designtuner postfix/submission/smtpd[30395]: lost connection after CONNECT from unknown[185.81.141.117]
Oct 31 19:40:49 designtuner postfix/submission/smtpd[30395]: disconnect from unknown[185.81.141.117] commands=0/0
节点JS客户端:
{ Error: 1XXXXXXXXXX35275584:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:797:
code: 'ECONNECTION', command: 'CONN' }
节点JS文件:
let transporter = nodemailer.createTransport({
host: 'mail.designtuner.com',
port: 587,
secure: true, // secure:true for port 465, secure:false for port 587
auth: {
user: 'admin@designtuner.com',
pass: 'XXXXXXX'
},
tls: {
rejectUnauthorized: false
}
});
我错过了什么吗?是因为我的反向DNS尚未传播吗?我最近更新了我的反向DNS,但网站可以从网络浏览器访问就好了,SSL证书似乎工作正常。
答案 0 :(得分:1)
加密SMTP有两种方式:端口465上的SMTP,首先建立TLS握手,然后启动SMTP会话,端口587上的带有STARTTLS的SMTP首先启动SMTP会话,然后在{{之后初始化TLS 1}} SMTP命令(然后以身份验证和要保护的所有内容开始)。
SMTPs(TLS优先,端口465)被视为已弃用;带有STARTTLS(端口587)的标准符合SMTP并不意味着在安全性或隐私方面存在任何缺陷。正确配置的SMTP服务器将不允许SMTP提交端口上的任何不安全连接。
nodemailer的STARTTLS
标志仅用于表示SMTP之前的TLS,这也是该行后面的注释所表示的(也明确说明了要使用的设置)。
secure
查看Nodemailer documentation,有一些关于配置选项的更多信息:
secure: true, // secure:true for port 465, secure:false for port 587
如果options.secure
连接只使用TLS。如果true
(默认值),则可通过STARTTLS命令将TLS升级为可用。[...]
false
如果这是options.requireTLS
而true
是secure
,它会强制Nodemailer使用STARTTLS,即使服务器不宣传对它的支持。< / p>
换句话说,要按照标准和最佳做法强制执行加密会话,请设置false
而不是requireTLS
,并在端口587上使用SMTP提交。
答案 1 :(得分:0)
您的代码中的注释已经指出了问题,因为端口587 secure
应该设置为false
port: 587, secure: true, // secure:true for port 465, secure:false for port 587
the documentation同样如此:
secure - 如果为true,则连接将在连接到服务器时使用TLS。如果为false(默认值),则在服务器支持STARTTLS扩展名时使用TLS。在大多数情况下,如果要连接到端口465,请将此值设置为true。对于端口587或25保持为假
原因是secure
期望隐式TLS,即从开始的TLS。但是,端口25和端口587通常使用显式TLS,即普通连接,然后在成功执行STARTTLS命令后升级到TLS。
如果您想使用显式TLS(端口587),但也要确保TLS不是可选的,请使用requireTLS
记录:
requireTLS - 如果这是真的且安全性为假,那么即使服务器不宣传对它的支持,Nodemailer也会尝试使用STARTTLS。如果连接无法加密,则不会发送消息