Roundcube & Postfix SMTP : SSL 루틴 : SSL3_READ_BYTES : tlsv1 경고 알 수없는 ca : s3_pkt.c


10

개인적으로 사용하고 다른 사용자에게 제공하는 Postfix / Dovecot / Roundcube 설정이 있습니다. 이 전체 설정을 새 상자로 전송하려고하는데 문제가 있습니다.

메일 수신이 제대로 작동하고 (내부에서만 테스트되었으며 도메인은 아직 전송되지 않음) 외부 IMAP 및 SMTP는 TLS / SSL을 사용하여 훌륭하게 작동합니다 (예 : Thunderbird).

문제는 127.0.0.1에 IMAP을 사용할 수 있고 사용자의 전자 메일을 훌륭하게 표시 할 수 있지만 전자 메일을 보낼 수없는 라운드 큐 설정에 있습니다. "SMTP Error (220): Authentication failed."

이상하게도 현재 서버에서 사용한 것과 동일한 Postfix / Dovecot 구성으로 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의 logs / 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
시스템이 최신 상태입니까?
Michael Hampton

예. 죄송합니다.이 시스템은 최근에 설치 한 데비안 제시 시스템이며, 업그레이드도 훌륭하지 않습니다.
1n5aN1aC

답변:


11

위의 오류 메시지는 클라이언트 (roundcube에 의해 호출 된 PHP 스크립트) 가 알 수없는 CA 때문에 피어 인증서를 확인하지 못하는 것처럼 보입니다 . 이 오류가 발생한 이유는 여러 가지가 있습니다.

openssl과 관련하여 Roundcube 버전 1.0-RC 이상은 SSL 연결 옵션과 함께 제공됩니다. 매개 변수 smtp_conn_optionsimap_conn_options버전 1.0-RC 및 1.0.3에서 각각 추가되었습니다. 기본적으로 두 매개 변수의 값은 모두 널입니다. 아래 스 니펫은 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를 알 수 없기 때문에)에서 PHP가 실패 할 수있는 이유


아치 리눅스 사용자 에게도 비슷한 사건이 일어났다 . 해결책은 다음 중 하나입니다.

  • openssl cert 디렉토리에 CA 인증서 설치
  • roundcube smtp_server 옵션에서 localhost를 Postfix FQDN (OP의 솔루션)으로 변경하십시오.
  • smtp_conn_options에서 verify_peer 및 / 또는 verify_peer_name 비활성화

2
대단히 감사합니다! 라운드 호스트가 로컬 호스트 대신 FQDN을 사용하도록 지시하는 간단한 변경으로 인해 즉시 수정되었습니다! PHP가 이전에 해당 설정을 변경했음을 알고 싶습니다!
1n5aN1aC


0

dovecot을 사용하기 때문에 솔루션은 ca를 /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem

-2

나는 같은 오류가 있었다. postfix main.cf 파일에 CA 파일을 추가하여 수정하십시오. 의 위치는에있을 수 있습니다 /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.