Roundcube & Postfix SMTP: Các thói quen SSL: SSL3_READ_BYTES: cảnh báo tlsv1 không xác định ca: s3_pkt.c


10

Tôi có một thiết lập Postfix / Dovecot / Roundcube mà tôi sử dụng cá nhân, cũng như cung cấp cho người dùng khác. Tôi đang cố gắng chuyển toàn bộ thiết lập này sang một hộp mới, nhưng gặp một số vấn đề.

Nhận thư đang hoạt động tốt, (chỉ được kiểm tra nội bộ, tên miền chưa được chuyển.) Cũng như IMAP & SMTP bên ngoài hoạt động tốt khi sử dụng TLS / SSL (ví dụ Thunderbird)

Vấn đề là với thiết lập roundcube của tôi, có thể sử dụng IMAP đến 127.0.0.1 và hiển thị email của người dùng một cách tuyệt vời, nhưng không thể gửi e-mail, chỉ cần tuyên bố: "SMTP Error (220): Authentication failed."

Điều kỳ lạ là, với cùng cấu hình Postfix / Dovecot mà tôi đã sử dụng trên máy chủ hiện tại của mình, Roundcube không còn có thể truy cập nó trên máy chủ mới của tôi. Đây là cấu hình roundcube có liên quan:

$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';

Nhật ký / lỗi của Roundcube chỉ đơn giản nói:

[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)

Trong khi nhật ký / smtp của Roundcube hiển thị:

[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

Dưới đây là các đoạn có liên quan của cấu hình postfix của tôi từ /etc/postfix/main.cf

# 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

Dưới đây là các đoạn có liên quan của cấu hình postfix của tôi từ /etc/postfix/master.cf

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

Nhật ký hậu tố /var/log/mail.logbáo cáo các lỗi sau:

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]

Tôi đã đọc một vài câu hỏi khác với mã lỗi tương tự, nhưng tất cả chúng dường như đang sử dụng chứng chỉ tự ký hoặc thêm liên kết đến hàm băm của chứng chỉ từ / etc / ssl / certs / , mà tôi đã thử, mặc dù tôi đã thử có thể đã hiểu sai và liên kết chứng chỉ sai.

Roundcube được cập nhật lên 1.0.4, được cho là đã khắc phục sự cố với tính không tương thích của phiên bản php do openssl. Tôi hết ý tưởng rồi, có ai có ý kiến ​​gì không?


1
Hệ thống có được cập nhật không?
Michael Hampton

Đúng. Xin lỗi, tôi đã quên đề cập ở trên rằng đây là hệ thống jessie Debian được cài đặt gần đây, cũng không có bản nâng cấp nổi bật nào.
1n5aN1aC

Câu trả lời:


11

Thông báo lỗi ở trên trông giống như một máy khách (tập lệnh PHP được gọi bởi roundcube) không thể xác minh chứng chỉ ngang hàng vì CA không xác định . Có nhiều lý do tại sao lỗi này xảy ra.

Liên quan đến openssl, Roundcube phiên bản 1.0-RC và sau đó được cung cấp với tùy chọn kết nối SSL. Tham số smtp_conn_optionsimap_conn_optionsđã được thêm vào trong phiên bản 1.0-RC và 1.0.3 tương ứng. Theo mặc định, giá trị của cả hai tham số là null. Đoạn mã dưới đây được lấy từ tệp roundcube config/defaults.inc.php. Bạn có thể tham khảo hướng dẫn sử dụng PHP để có được mô tả đầy đủ về tham số này.

// 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;

Trong nhiều hệ thống sử dụng chứng chỉ tự ký, giá trị mặc định hoạt động cho PHP 5.5 trở về trước. Theo mặc định, PHP 5.6 sẽ xác minh chứng chỉ ngang hàng với CA đã cài đặt và xác minh tên ngang hàng .

Bây giờ, có vẻ như Debian jessie cũng được phát hành với phiên bản PHP mặc định 5.6 . Rõ ràng PHP không xác minh chứng chỉ postfix. Những lý do có thể, PHP không thành công trong verify_peer_name (vì bạn chỉ định localhost trong tên máy chủ) hoặc trong verify_peer (vì CA không xác định)


Trường hợp tương tự cũng xảy ra với người dùng Arch Linux . Giải pháp là:

  • Cài đặt chứng chỉ CA trong thư mục certl
  • Trong tùy chọn roundcube smtp_server, thay đổi localhost thành Postfix FQDN (giải pháp từ OP)
  • Vô hiệu hóa verify_peer và / hoặc verify_peer_name trong smtp_conn_options

2
Cảm ơn rât nhiều! Hóa ra, một thay đổi đơn giản là bảo roundcube sử dụng FQDN thay vì localhost ngay lập tức sửa nó! Ước gì tôi đã biết php đã thay đổi các cài đặt đó trước đây!
1n5aN1aC

1

PHP 5.6 thực hiện xác minh ngang hàng SSL, nghĩa là nó kiểm tra chứng chỉ của máy chủ SMTP cho dù đó là CA đã biết.

Tùy chọn smtp_server phải phù hợp với trường CN của chứng chỉ! (Tên gọi chung)

Vì vậy, đừng đặt localhost vào đó, hãy đặt tên miền đủ điều kiện vào đó phù hợp với chứng chỉ của bạn.

Tín dụng vào: https://www.blogobramje.nl/posts/Roundcube_seinating_mail_broken_with_PHP_5.6_-_STARTTLS_fails/


0

bởi vì tôi sử dụng dovecot, giải pháp của tôi là thêm ca vào /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

Tôi đã có những lỗi giống nhau. Khắc phục sự cố thêm tệp CA trong tệp postfix main.cf. Các vị trí trong có thể là tại /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

cùng một vấn đề! Nhanh chóng một cách giải quyết bẩn: thay đổi cấu hình / defaults.inc.php verify_peer thành false.

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

CẢNH BÁO CHỈ để thử nghiệm; KHÔNG cho môi trường sản xuất


1
Ngay cả với cảnh báo bạn đưa ra, đây vẫn không phải là một ý tưởng hay: OP biết vấn đề liên quan đến SSL / TLS và việc vô hiệu hóa kiểm tra chứng chỉ sẽ 'khiến mọi thứ hoạt động' trong khi loại bỏ phần lớn SSL / TLS bảo mật sẽ cung cấp. Có lẽ hữu ích hơn cho OP sẽ đi qua khối cấu hình của bạn (có khả năng với verify_peer => true) và giải thích những gì cafilenên trỏ đến.
iwaseatenbyagrue
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.