Roundcube & Postfix SMTP: รูทีน SSL: SSL3_READ_BYTES: ไม่ทราบการแจ้งเตือน tlsv1 ca: s3_pkt.c


10

ฉันมีการตั้งค่า Postfix / Dovecot / Roundcube ที่ฉันใช้เป็นการส่วนตัวรวมถึงมอบให้กับผู้ใช้รายอื่น ฉันพยายามถ่ายโอนการตั้งค่าทั้งหมดนี้ไปยังกล่องใหม่ แต่มีปัญหา

การรับจดหมายทำงานได้ดี (ผ่านการทดสอบภายในเท่านั้นโดเมนยังไม่ถูกถ่ายโอน) รวมถึง IMAP และ SMTP ภายนอกทำงานได้ดีโดยใช้ TLS / SSL (เช่น 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

นี่คือตัวอย่างที่เกี่ยวข้องของการกำหนดค่า postfix ของฉันจาก /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

นี่คือตัวอย่างที่เกี่ยวข้องของการกำหนดค่า postfix ของฉันจาก /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

บันทึกของ 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 ซึ่งควรจะแก้ไขปัญหาการใช้งานร่วมกันไม่ได้ของ php เนื่องจาก openssl ฉันหมดความคิดไม่มีใครมีความคิดอะไรบ้าง


1
ระบบทันสมัยหรือไม่?
Michael Hampton

ใช่. ขออภัยฉันลืมที่จะกล่าวถึงข้างต้นว่านี่เป็นระบบ Debian jessie ที่เพิ่งติดตั้งเมื่อเร็ว ๆ นี้ไม่มีการอัพเกรดที่โดดเด่น
1n5aN1aC

คำตอบ:


11

เกิดข้อผิดพลาดดังกล่าวข้างต้นดูเหมือนลูกค้า (PHP สคริปต์เรียกโดย RoundCube) ล้มเหลวในการตรวจสอบใบรับรองเพียร์เพราะ CA มีสาเหตุหลายประการที่ทำให้เกิดข้อผิดพลาดนี้

เกี่ยวกับ openssl, Roundcube เวอร์ชัน 1.0-RC และใหม่กว่าจัดส่งพร้อมตัวเลือกการเชื่อมต่อ SSL พารามิเตอร์smtp_conn_optionsและimap_conn_optionsถูกเพิ่มในเวอร์ชัน 1.0-RC และ 1.0.3 ตามลำดับ โดยค่าเริ่มต้นค่าของพารามิเตอร์ทั้งสองเป็นโมฆะ config/defaults.inc.phpข้อมูลด้านล่างถูกนำมาจากไฟล์ RoundCube คุณสามารถอ้างถึงคู่มือ 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 และตรวจสอบชื่อเพียร์

ตอนนี้ดูเหมือนว่าเด jessie ยังมาพร้อมกับรุ่นเริ่มต้น PHP 5.6 เห็นได้ชัดว่า PHP ไม่สามารถตรวจสอบใบรับรอง postfix ได้ สาเหตุที่เป็นไปได้, PHP ล้มเหลวใน Verify_peer_name (เพราะคุณระบุ localhost ในชื่อโฮสต์) หรือใน Verify_peer (เพราะไม่ทราบ CA)


กรณีที่คล้ายกันก็ยังเกิดขึ้นกับผู้ใช้ Arch ลินุกซ์ วิธีแก้ไขคือ:

  • ติดตั้งใบรับรอง CA ในไดเร็กทอรี openssl cert
  • ในตัวเลือก roundcube smtp_server เปลี่ยน localhost เป็น Postfix FQDN (โซลูชันจาก OP)
  • ปิดใช้งาน Verify_peer และ / หรือ Verify_peer_name ใน smtp_conn_options

2
ขอบคุณมาก! ปรากฎว่ามีการเปลี่ยนแปลงอย่างง่าย ๆ ในการบอก roundcube เพื่อใช้ FQDN แทน localhost ทันทีที่ซ่อมมัน! หวังว่าฉันจะรู้ php เปลี่ยนการตั้งค่าเหล่านั้นมาก่อน!
1n5aN1aC

1

PHP 5.6 ทำการตรวจสอบ SSL กับเพื่อนหมายความว่าตรวจสอบใบรับรองของเซิร์ฟเวอร์ SMTP ว่าเป็น CA ที่รู้จักหรือไม่

อ็อพชัน smtp_server ต้องตรงกับฟิลด์ CN ของใบรับรอง! (ชื่อสามัญ)

ดังนั้นอย่าใส่ localhost ในนั้นใส่ชื่อโดเมนแบบเต็มในนั้นตรงกับใบรับรองของคุณ

เครดิตไปที่: https://www.blogobramje.nl/posts/Roundcube_sending_mail_broken_with_PHP_5.6_-_STARTTLS_failed/



-2

ฉันมีข้อผิดพลาดเดียวกัน แก้ไขได้โดยเพิ่มไฟล์ CA ในไฟล์ mainfix postfix /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 จะดำเนินการผ่านบล็อกการกำหนดค่าของคุณ (อาจมีverify_peer => true) และอธิบายสิ่งที่cafileควรชี้ไปที่
iwaseatenbyagrue
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.