राउंड क्यूब और पोस्टफ़िक्स SMTP: SSL रूटीन: SSL3_READ_BYTES: tlsv1 अलर्ट अज्ञात ca: s3_pkt.c


10

मेरे पास पोस्टफ़िक्स / डवकोट / राउंडक्यूब सेटअप है जो मैं व्यक्तिगत रूप से उपयोग करता हूं, साथ ही अन्य उपयोगकर्ताओं को भी प्रदान करता हूं। मैं इस पूरे सेटअप को एक नए बॉक्स में स्थानांतरित करने का प्रयास कर रहा हूं, लेकिन कुछ मुद्दे हैं।

मेल प्राप्त करना ठीक काम कर रहा है, (केवल आंतरिक रूप से परीक्षण किया गया है, डोमेन अभी तक स्थानांतरित नहीं हुआ है) और साथ ही बाहरी IMAP और SMTP टीएलएस / एसएसएल (थंडरबर्ड, उदाहरण के लिए) का उपयोग करके महान काम कर रहा है

समस्या मेरे राउंडक्यूब सेटअप के साथ है, जो IMAP का उपयोग 127.0.0.1 कर सकता है, और उपयोगकर्ता के ईमेल को आश्चर्यजनक रूप से प्रदर्शित करता है, लेकिन ई-मेल नहीं भेज सकता, बस दावा कर रहा है: "SMTP Error (220): Authentication failed."

अजीब तरह से, उसी पोस्टफिक्स / डवकोट कॉन्फिग के साथ, जिसका उपयोग मैंने अपने वर्तमान सर्वर पर किया था, राउंडक्यूब अब इसे अपने नए सर्वर पर एक्सेस नहीं कर सकता है। यहाँ प्रासंगिक राउंडक्यूब विन्यास है:

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

राउंडक्यूब के लॉग / त्रुटियां लॉग बस कहते हैं:

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

जबकि राउंडक्यूब लॉग / 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 से मेरे पोस्टफिक्स कॉन्फिग के प्रासंगिक स्निपेट दिए गए हैं

# 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 से मेरे पोस्टफिक्स कॉन्फिग के प्रासंगिक स्निपेट दिए गए हैं

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

पोस्टफ़िक्स लॉग /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 / के लिए एक लिंक जोड़ते हैं , जो मैंने कोशिश की है, हालांकि मैंने गलत सर्टिफिकेट को मिस-समझा और लिंक किया जा सकता है।

राउंड क्यूब 1.0.4 में अपडेट किया गया है, जो कि ओपनसीएल के कारण php संस्करण असंगति के साथ एक समस्या को ठीक करना था। मैं विचारों से बाहर हूँ, किसी के पास कोई विचार है?


1
क्या सिस्टम अप टू डेट है?
माइकल हैम्पटन

हाँ। क्षमा करें, मैं ऊपर उल्लेख करना भूल गया कि यह हाल ही में स्थापित डेबियन जेसी प्रणाली है, कोई भी उन्नत उन्नयन नहीं है।
1n5aN1aC

जवाबों:


11

उपरोक्त त्रुटि संदेश क्लाइंट की तरह दिखता है (PHP स्क्रिप्ट राउंड क्यूब द्वारा आमंत्रित) सहकर्मी प्रमाणपत्र को सत्यापित करने में विफल रहता है क्योंकि अज्ञात सीए । यह त्रुटि क्यों हुई, इसके कई कारण हैं।

ओपनसेल के बारे में, राउंडक्यूब संस्करण 1.0-आरसी और बाद में एसएसएल कनेक्शन विकल्प के साथ भेज दिया गया। पैरामीटर smtp_conn_optionsऔर imap_conn_optionsसंस्करण 1.0-RC और 1.0.3 में क्रमशः जोड़ा गया था। डिफ़ॉल्ट रूप से, दोनों मापदंडों का मूल्य शून्य था। नीचे दिए गए स्निपेट को राउंडक्यूब फ़ाइल से लिया गया था 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 के खिलाफ सहकर्मी प्रमाणपत्र को सत्यापित करेगा और सहकर्मी के नाम को सत्यापित करेगा

अब, डेबियन जेसी भी डिफ़ॉल्ट PHP संस्करण 5.6 के साथ भेज दिया लगता है । जाहिरा तौर पर PHP पोस्टफ़िक्स प्रमाणपत्र को सत्यापित करने में विफल रहती है। संभावित कारण, PHP Ver_peer_name में विफल रहता है (क्योंकि आप होस्टनाम में लोकलहोस्ट निर्दिष्ट करते हैं) या Ver_peer में (क्योंकि CA अज्ञात था)


इसी तरह का मामला आर्क लिनक्स उपयोगकर्ता के लिए भी हुआ था । समाधान या तो था:

  • Opensl प्रमाणित निर्देशिका में CA प्रमाणपत्र स्थापित करें
  • राउंडक्यूब smtp_server ऑप्शन में, लोकलहोस्ट को पोस्टफिक्स एफक्यूडीएन में बदलें (ओपी से समाधान)
  • Smtp_conn_options में verify_peer और / या verify_peer_name अक्षम करें

2
आपका बहुत बहुत धन्यवाद! पता चला, लोकलहोस्ट के बजाय FQDN का उपयोग करने के लिए राउंडक्यूब को बताने का एक सरल परिवर्तन तुरन्त इसे ठीक कर दिया! काश मैं जानता था कि php पहले उन सेटिंग्स को बदल दिया है!
1n5aN1aC

1

PHP 5.6 SSL सहकर्मी सत्यापन करता है, जिसका अर्थ है कि यह SMTP सर्वर के प्रमाण पत्र की जांच करता है कि क्या यह एक ज्ञात CA है।

Smtp_server विकल्प को प्रमाणपत्र के CN फ़ील्ड से मेल खाना चाहिए! (साधारण नाम)

इसलिए वहां लोकलहोस्ट न रखें, वहां पूर्ण योग्य डोमेन नाम डालें जो आपके प्रमाणपत्र से मेल खाता हो।

क्रेडिट: https://www.blogobramje.nl/posts/Roundcube_sending_mail_broken_with_PHP_5.6_-_STARTTLS_failed/


0

क्योंकि मैं dovecot का उपयोग करता हूं मेरा समाधान ca को जोड़ना था /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

मेरी भी यही त्रुटि थी। इसे पोस्टफिक्स main.cf फ़ाइल में CA फ़ाइल जोड़कर ठीक करें। में स्थान पर हो सकता है /etc/postfix/main.cf

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


-2

एक ही समस्या है! एक गंदे वर्कअराउंड को त्वरित करें: config / defaults.inc.php में वेरिफिकेशन_पेचर को बदलकर गलत करें।

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

केवल परीक्षण के लिए चेतावनी; उत्पादन वातावरण के लिए नहीं


1
यहां तक ​​कि आपके द्वारा लगाई गई चेतावनी के साथ, यह अभी भी एक महान विचार नहीं है: ओपी को एसएसएल / टीएलएस से संबंधित होने की समस्या का पता है, और प्रमाणित चेक को अक्षम करने से सुरक्षा एसएसएल / टीएलएस को बहुत दूर करते हुए काम करेगा '। हो सकता है कि ओपी के लिए अधिक उपयोगी आपके कॉन्फ़िगरेशन ब्लॉक (संभवतः के साथ verify_peer => true) के माध्यम से चलना होगा , और यह cafileबताना होगा कि क्या इंगित करना चाहिए।
इवासेतेनीबाग्रे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.