Roundcube & Postfix SMTP: Rutinitas SSL: SSL3_READ_BYTES: tlsv1 lansiran tidak dikenal ca: s3_pkt.c

10

Saya memiliki pengaturan Postfix / Dovecot / Roundcube yang saya gunakan secara pribadi, serta memberikan kepada pengguna lain. Saya mencoba mentransfer seluruh pengaturan ini ke kotak baru, tetapi mengalami beberapa masalah.

Penerimaan surat berfungsi dengan baik, (hanya diuji secara internal, domain belum ditransfer.) Serta IMAP & SMTP eksternal berfungsi dengan baik menggunakan TLS / SSL (Thunderbird, misalnya)

Masalahnya adalah dengan pengaturan roundcube saya, yang dapat menggunakan IMAP ke 127.0.0.1, dan menampilkan email pengguna secara luar biasa, tetapi tidak dapat mengirim email, hanya mengklaim: "SMTP Error (220): Authentication failed."

Anehnya, dengan konfigurasi Postfix / Dovecot yang sama yang saya gunakan di server saya saat ini, Roundcube tidak lagi dapat mengaksesnya di server baru saya. Berikut adalah konfigurasi roundcube yang relevan:

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

Log / kesalahan log Roundcube hanya mengatakan:

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

Sementara Roundcube's log / smtp log menunjukkan:

[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

Berikut ini cuplikan relevan dari konfigurasi postfix saya dari /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

Berikut ini cuplikan relevan dari konfigurasi postfix saya dari /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

Log Postfix /var/log/mail.logmelaporkan kesalahan berikut:

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]

Saya telah membaca beberapa pertanyaan lain dengan kode kesalahan yang serupa, tetapi semuanya tampaknya menggunakan sertifikat yang ditandatangani sendiri, atau menambahkan tautan ke hash sertifikat dari / etc / ssl / certs / , yang telah saya coba, meskipun saya mungkin salah mengerti, dan menautkan sertifikat yang salah.

Roundcube diperbarui ke 1.0.4, yang seharusnya memperbaiki masalah dengan ketidakcocokan versi php karena openssl. Saya kehabisan ide, adakah yang punya ide?

1n5aN1aC
sumber
1
Apakah sistemnya mutakhir?
Michael Hampton
Iya. Maaf, saya lupa menyebutkan di atas bahwa ini adalah sistem jessie Debian yang baru diinstal, juga tidak ada peningkatan yang luar biasa.
1n5aN1aC

Jawaban:

11

Pesan kesalahan di atas terlihat seperti klien (skrip PHP yang dipanggil oleh roundcube) gagal memverifikasi sertifikat rekan karena CA tidak dikenal . Ada banyak alasan mengapa kesalahan ini terjadi.

Mengenai openssl, Roundcube versi 1.0-RC dan kemudian dikirimkan dengan opsi koneksi SSL. Parameter smtp_conn_optionsdan imap_conn_optionsditambahkan masing-masing dalam versi 1.0-RC dan 1.0.3. Secara default, nilai kedua parameter adalah nol. Cuplikan di bawah ini diambil dari file roundcube config/defaults.inc.php. Anda bisa merujuk ke manual PHP untuk mendapatkan deskripsi lengkap dari parameter ini.

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

Di banyak sistem yang menggunakan sertifikat yang ditandatangani sendiri, nilai default berfungsi untuk PHP 5.5 dan sebelumnya. Secara default, PHP 5.6 akan memverifikasi sertifikat rekan terhadap CA yang diinstal dan memverifikasi nama rekan .

Sekarang, sepertinya Debian jessie juga dikirimkan dengan versi PHP default 5.6 . Tampaknya PHP gagal memverifikasi sertifikat postfix. Alasan yang mungkin, PHP gagal di verifikasi_peer_name (karena Anda menentukan localhost di hostname) atau di verifikasi_peer (karena CA tidak dikenal)


Kasus serupa juga terjadi pada pengguna Arch Linux . Solusinya adalah:

  • Instal sertifikat CA di direktori openssl cert
  • Dalam opsi smtp_server roundcube, ubah localhost ke Postfix FQDN (solusi dari OP)
  • Nonaktifkan verifikasi_peer dan / atau verifikasi_peer_name di smtp_conn_options
masegaloeh
sumber
2
Terima kasih banyak! Ternyata, perubahan sederhana memberitahu roundcube untuk menggunakan FQDN dan bukannya localhost langsung memperbaikinya! Seandainya saya tahu php mengubah pengaturan itu sebelumnya!
1n5aN1aC
0

karena saya menggunakan dovecot solusi saya adalah menambahkan ca ke /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem
Klaus
sumber
-2

Saya memiliki kesalahan yang sama. Perbaiki dengan menambahkan file CA di file main.cf postfix. Lokasi di mungkin di /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

tsukuyomi3891
sumber
-2

permasalahan yang sama! Cepat solusi yang kotor: ubah di config / defaults.inc.php Verify_peer menjadi false.

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

PERINGATAN HANYA untuk Pengujian; BUKAN UNTUK Lingkungan Produksi

ranbit.one
sumber
1
Bahkan dengan peringatan yang Anda berikan, ini masih bukan ide yang bagus: OP tahu masalah ini terkait dengan SSL / TLS, dan menonaktifkan pemeriksaan sertifikat akan 'membuat semuanya berfungsi' sambil menghapus banyak keamanan yang disediakan SSL / TLS. Mungkin lebih berguna untuk OP akan berjalan melalui blok konfigurasi Anda (berpotensi dengan verify_peer => true), dan menjelaskan apa yang cafileharus ditunjukkan .
iwaseatenbyagrue