Postfix 发送错误:必须发出 STARTTLS 命令

Postfix 发送错误:必须发出 STARTTLS 命令

运行 Ubuntu 12.04 并尝试配置 postfix 以通过 GMAIL 中继发送和接收。我遇到了连接问题,尤其是 TLS。我尝试了许多故障排除解决方案,并更改了我的 main.cf 以解决 TLS,但仍然收到以下错误。

尝试使用以下方法调试连接问题:

      `root@mailservice:/etc/postfix# openssl s_client -connect localhost:587 -starttls smtp`

我收到这些错误

    `connect: Connection refused'
     'connect:errno=111`

在我的日志中我看到:

       Jun 11 13:54:31 mailservice postfix/smtp[3765]: warning: cannot get RSA certificate
       from file /etc/postfix/cert.pem: disabling TLS support

       Jun 11 13:54:31 mailservice postfix/smtp[3765]: warning: TLS library problem: 
       3765:error:0906D06C:PEM routines:PEM_read_bio:no start    
       line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE:

       Jun 11 13:54:31 mailservice postfix/smtp[3765]: warning: TLS library problem:   
       3765:error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM    
       lib:ssl_rsa.c:729:

       Jun 11 13:54:31 mailservice postfix/smtp[3765]: 9986B6846A: to=
       <[email protected]>, relay=smtp.gmail.com[173.194.77.109]:587, delay=0.15, 
       delays=0.02/0.02/0.09/0.02, dsn=5.7.0, status=bounced (host 
       smtp.gmail.com[173.194.77.109] said: 530 5.7.0 Must issue a STARTTLS command first.  
       hd9sm12170509obc.6 (in reply to MAIL FROM command))

我的 main.cf 的内容(与 TLS 有关)如下所示:

     #TLS Parameters 
     smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
     smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
     smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
     smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

     #TLS Settings 
     smtp_use_tls = yes 
     smtp_tls_security_level = may 
     smtp_tls_loglevel = 1
     smtp_enforce_tls = yes 
     smtp_tls_CAfile = /etc/postfix/cacert.pem
     smtp_tls_cert_file = /etc/postfix/cert.pem 
     smtp_tls_key_file = $smtp_tls_cert_file 
     smtp_tls_session_cache_dataabase = btree:/var/run/smtp_tls_session_cache 
     smtp_tls_note_starttls_offer = yes 
     smtpd_use_tls = yes 
     smtpd_tls_security)level = may 
     smtpd_tls_auth_only = no 
     smtpd_tls_CAfile = /etc/postfix/cacert.pem
     smtpd_tls_cert_file = /etc/postfix/cert.pem
     smtpd_tls_key_file = /etc/postfix/key.pem
     smtpd_tls_received_header = yes 
     smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache 
     smtpd_tls_session_cache_timeout = 3600s 
     tls_random_source = dev:/dev/urandom

据我所知,一切都是为了建立正确的 TLS 连接,但我不确定需要在 main.cf 或其他地方进行哪些更改才能发送邮件。

答案1

Postix 表示它无权访问证书。证书的创建和存储权限并不严格。

您需要检查所有文件是否都可以由 postfix 受限用户访问。您可以使用以下命令检查 postfix 以哪个用户身份运行:

postconf mail_owner

之后,您应该授予该用户访问配置文件中提到的所有密钥/证书的权限。

例如我的钥匙如下:

-r--r-----  1 postfix  cyrus   668  4 Apr 13:17 somehost.pk

答案2

从: http://www.postfix.org/TLS_README.html...

服务器端 TLS 活动日志记录...

仅当出现问题时才使用日志级别 3。

更多的...

要获取有关 Postfix SMTP 服务器 TLS 活动的其他信息,您可以将日志级别从 0 提高到 4。每个日志级别还包括在较低日志级别记录的信息。

级别 Postfix 2.9 及更高版本 早期版本。

  • 0 仅记录 TLS 握手完成时的摘要消息 — 如果不需要客户端证书验证,则不记录客户端证书信任链验证错误。禁用 TLS 活动记录。
  • 1 还记录信任链验证错误和对等证书摘要信息。还记录 TLS 握手和证书信息。
  • 2 还在 TLS 协商期间记录级别。
  • 3 还记录 TLS 协商过程的十六进制和 ASCII 转储。
  • 4 还记录 STARTTLS 之后完整传输的十六进制和 ASCII 转储。

仅在出现问题时才使用日志级别 3。强烈不建议使用日志级别 4。

相关内容