Roundcube和Postfix SMTP:SSL例程:SSL3_READ_BYTES:tlsv1警报未知ca:s3_pkt.c


10

我有一个Postfix / Dovecot / Roundcube设置,我可以个人使用,也可以提供给其他用户。我试图将整个设置转移到一个新盒子,但是遇到一些问题。

邮件接收正常(仅在内部进行测试,域尚未传输。)以及使用TLS / SSL的外部IMAP和SMTP都运行良好(例如,Thunderbird)

问题出在我的roundcube设置上,它可以使用IMAP到127.0.0.1,并且可以很好地显示用户的电子邮件,但是无法发送电子邮件,仅声明: "SMTP Error (220): Authentication failed."

奇怪的是,使用与我在当前服务器上使用的相同的Postfix / Dovecot配置,Roundcube将无法再在新服务器上访问它。这是相关的roundcube配置:

$config['smtp_server'] = 'tls://localhost';

// Log SMTP conversation to <log_dir>/smtp or to syslog
$config['smtp_debug'] = true;

// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
$config['smtp_port'] = 587;

// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '%u';

// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '%p';

Roundcube的日志/错误日志仅表示:

[02-Jan-2015 16:55:49 America/New_York] STARTTLS failed (): 
[02-Jan-2015 16:55:49 -0500]: SMTP Error: SMTP error: Authentication failure: STARTTLS failed (Code: ) in /var/wwwmail/program/lib/Roundcube/rcube.php on line 1505 (POST /?_task=mail&_unlock=loading1420235752730&_lang=undefined&_framed=1?_task=mail&_action=send)

虽然Roundcube的日志/ smtp日志显示:

[02-Jan-2015 17:50:01 -0500]: Recv: 220 example.net ESMTP Postfix
[02-Jan-2015 17:50:01 -0500]: Send: EHLO example.net
[02-Jan-2015 17:50:01 -0500]: Recv: 250-example.net
[02-Jan-2015 17:50:01 -0500]: Recv: 250-PIPELINING
[02-Jan-2015 17:50:01 -0500]: Recv: 250-SIZE 104857600
[02-Jan-2015 17:50:01 -0500]: Recv: 250-VRFY
[02-Jan-2015 17:50:01 -0500]: Recv: 250-ETRN
[02-Jan-2015 17:50:01 -0500]: Recv: 250-STARTTLS
[02-Jan-2015 17:50:01 -0500]: Recv: 250-ENHANCEDSTATUSCODES
[02-Jan-2015 17:50:01 -0500]: Recv: 250-8BITMIME
[02-Jan-2015 17:50:01 -0500]: Recv: 250 DSN
[02-Jan-2015 17:50:01 -0500]: Send: STARTTLS
[02-Jan-2015 17:50:01 -0500]: Recv: 220 2.0.0 Ready to start TLS
[02-Jan-2015 17:50:01 -0500]: Send: RSET
[02-Jan-2015 17:50:01 -0500]: Recv: M I A…"qhçR¸
[02-Jan-2015 17:50:01 -0500]: Send: QUIT

这是/etc/postfix/main.cf中我的postfix配置的相关片段

# TLS parameters for SMTP service
smtpd_tls_security_level    = may
smtpd_tls_cert_file         = /etc/ssl/private/example.net/example.net.crt
smtpd_tls_key_file          = /etc/ssl/private/example.net/example.net.key
smtpd_tls_auth_only         = yes

这是我的/etc/postfix/master.cf中的postfix配置的相关片段

smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
submission inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o cleanup_service_name=cleanup_submit
smtps     inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Postfix日志/var/log/mail.log报告以下错误:

Jan  2 17:50:01 example postfix/submission/smtpd[19959]: connect from localhost.localdomain[127.0.0.1]
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: SSL_accept error from localhost.localdomain[127.0.0.1]: 0
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: warning: TLS library problem: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1292:SSL alert number 48:
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: lost connection after STARTTLS from localhost.localdomain[127.0.0.1]
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: disconnect from localhost.localdomain[127.0.0.1]

我还阅读了其他一些错误代码类似的问题,但是它们似乎都在使用自签名证书,或者从/ etc / ssl / certs /添加了指向证书哈希的链接,尽管我尝试过可能有误解,并链接了错误的证书。

Roundcube已更新至1.0.4,本来可以解决由于openssl导致的php版本不兼容的问题。我全都没主意,有人有主意吗?


1
系统是最新的吗?
迈克尔·汉普顿

是。抱歉,我在上面忘了提到这是最近安装的Debian jessie系统,也没有出色的升级。
1n5aN1aC 2015年

Answers:


11

上面的错误消息似乎是客户端(roundcube调用的PHP脚本)无法验证对等证书,因为CA未知。发生此错误的原因有很多。

关于openssl,Roundcube版本1.0-RC及更高版本带有SSL连接选项。参数smtp_conn_optionsimap_conn_options分别在版本1.0-RC和1.0.3中添加。默认情况下,两个参数的值均为null。下面的摘录取自roundcube文件config/defaults.inc.php。您可以参考PHP手册以获得此参数的完整描述。

// SMTP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation, and
// requires 'smtp_timeout' to be non zero.
// $config['smtp_conn_options'] = array(
//   'ssl'         => array(
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ),
// );
$config['smtp_conn_options'] = null;

在许多使用自签名证书的系统中,默认值适用于PHP 5.5及更早版本。默认情况下,PHP 5.6将根据已安装的CA验证对等证书,并验证对等名称

现在,看起来Debian jessie也附带了默认的PHP版本5.6。显然,PHP无法验证后缀证书。可能的原因,PHP在verify_peer_name(因为您在主机名中指定了localhost)或在verify_peer(因为CA未知)中失败


Arch Linux用户也发生类似的情况。解决方案是:

  • 在openssl证书目录中安装CA证书
  • 在roundcube smtp_server选项中,将localhost更改为Postfix FQDN(来自OP的解决方案)
  • 在smtp_conn_options中禁用verify_peer和/或verify_peer_name

2
非常感谢你!原来,告诉roundcube使用FQDN而不是localhost的简单更改立即解决了它!希望我以前知道php更改了那些设置!
1n5aN1aC 2015年


0

因为我使用dovecot我的解决方案是将ca添加到 /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

我有同样的错误。进行修复,将CA文件添加到postfix main.cf文件中。中的位置可能在/etc/postfix/main.cf

smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/foo-cert.pem
smtpd_tls_key_file = /etc/postfix/foo-key.pem


-2

同样的问题!快速解决肮脏的问题:将config / defaults.inc.php verify_peer更改为false。

$config['smtp_conn_options'] = array(
   'ssl'         => array(
     'verify_peer'  => false,
     'verify_depth' => 3,
     'cafile'       => '/etc/openssl/certs/ca.crt',
   ),
);

警告仅用于测试; 不适用于生产环境


1
即使发出警告,这仍然不是一个好主意:OP知道问题与SSL / TLS有关,并且禁用证书检查将“使事情正常进行”,同时消除了SSL / TLS可以提供​​的许多安全性。对于OP而言,可能更有用的是遍历您的config块(可能带有verify_peer => true),并解释cafile应该指向的内容。
iwaseatenbyagrue
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.