Beberapa hari yang lalu Gmail tiba-tiba memutuskan untuk berhenti mengirim surat ke server surat saya. Saya menggunakan Postfix dan Dovecot dengan Sertifikat SSL berbayar yang berjalan pada Debian 7 dengan semua yang diperbarui.
Saya mail.log
menunjukkan kesalahan berikut:
Dec 19 11:09:11 server postfix/smtpd[19878]: initializing the server-side TLS engine
Dec 19 11:09:11 server postfix/tlsmgr[19880]: open smtpd TLS cache btree:/var/lib/postfix/smtpd_scache
Dec 19 11:09:11 server postfix/tlsmgr[19880]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
Dec 19 11:09:11 server postfix/smtpd[19878]: connect from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
Dec 19 11:09:11 server postfix/smtpd[19878]: setting up TLS connection from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
Dec 19 11:09:11 server postfix/smtpd[19878]: mail-wi0-x230.google.com[2a00:1450:400c:c05::230]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STR ENGTH:!aNULL:!DES:!3DES:!MD5:!DES+MD5:!RC4:!RC4-MD5"
Dec 19 11:09:11 server postfix/smtpd[19878]: SSL_accept:before/accept initialization
Dec 19 11:09:11 server postfix/smtpd[19878]: SSL_accept:error in unknown state
Dec 19 11:09:11 server postfix/smtpd[19878]: SSL_accept error from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]: -1
Dec 19 11:09:11 server postfix/smtpd[19878]: warning: TLS library problem: 19878:error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:647:
Dec 19 11:09:11 server postfix/smtpd[19878]: lost connection after STARTTLS from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
Dec 19 11:09:11 server postfix/smtpd[19878]: disconnect from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
kutipan dari postfix saya main.cf
:
smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_CAfile = path to CA Bundle
smtpd_tls_cert_file= path to cert (pem)
smtpd_tls_key_file=path to key (pem)
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_exclude_ciphers = aNULL, DES, 3DES, MD5, DES+MD5, RC4, RC4-MD5
smtpd_tls_protocols=!SSLv2,!TLSv1,!TLSv1.1,!SSLv3
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_received_header = yes
tls_preempt_cipherlist = yes
tls_medium_cipherlist = AES256+EECDH:AES256+EDH
Saya tidak tahu di mana masalahnya, karena saya secara teratur menerima surat dari orang lain. Tidak ada kesalahan menghubungkan ke port 25 melalui telnet atau port 465 via openssl
Tambahan: Saya menerima email ini sebagai balasan dari Google:
Delivery to the following recipient failed permanently:
<removed>
Technical details of permanent failure:
TLS Negotiation failed
----- Original message -----
[...]
Mungkin itu masalah dengan pembuat sandi saya?
Jawaban untuk pertanyaan masegaloeh:
openssl s_client -connect localhost:25 -starttls smtp
CONNECTED(00000003)
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
[...]
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]
---
No client certificate CA names sent
---
SSL handshake has read 6267 bytes and written 477 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: [...]
Session-ID-ctx:
Master-Key: [...]
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 3600 (seconds)
TLS session ticket: [...]
Compression: 1 (zlib compression)
Start Time: 1418986680
Timeout : 300 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
---
250 DSN
Pembaruan 1:
diterbitkan kembali sertifikat SSL saya. Semuanya dihasilkan sebagai berikut:
openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr -sha256
Saya kemudian membuat file baru yang terdiri dari crt
dan key
, setelah ini saya membuat bundel CA:
cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.crt
Menambahkan semuanya ke konfigurasi dovecot dan postfix saya dan me-restart kedua layanan.
Google masih gagal mengirim email ke server saya yang mengakibatkanTLS Negotiation failed
Saya mencoba penyedia email lain (web.de) dan emailnya terkirim.
log web.de:
Dec 19 17:33:15 server postfix/smtpd[14105]: connect from mout.web.de[212.227.15.3]
Dec 19 17:33:15 server postfix/smtpd[14105]: setting up TLS connection from mout.web.de[212.227.15.3]
Dec 19 17:33:15 server postfix/smtpd[14105]: mout.web.de[212.227.15.3]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STRENGTH"
Dec 19 17:33:15 server postfix/smtpd[14105]: mout.web.de[212.227.15.3]: save session EA1635ED786AFC2D9C7AB43EF43620A1D9092DC640FDE21C01E7BA25981D2445&s=smtp&l=268439647 to smtpd cache
Dec 19 17:33:15 server postfix/tlsmgr[14107]: put smtpd session id=EA1635ED786AFC2D9C7AB43EF43620A1D9092DC640FDE21C01E7BA25981D2445&s=smtp&l=268439647 [data 127 bytes]
Dec 19 17:33:15 server postfix/tlsmgr[14107]: write smtpd TLS cache entry EA1635ED786AFC2D9C7AB43EF43620A1D9092DC640FDE21C01E7BA25981D2445&s=smtp&l=268439647: time=1419006795 [data 127 bytes]
Dec 19 17:33:15 server postfix/smtpd[14105]: Anonymous TLS connection established from mout.web.de[212.227.15.3]: TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Soultion:
Setelah mengaktifkan TLSv1
dan TLSv1.1
di smtpd_(mandatory)_protocols
bagian semuanya berfungsi dengan baik. Terima kasih masegaloeh !
Dec 20 11:44:46 server postfix/smtpd[31966]: initializing the server-side TLS engine
Dec 20 11:44:46 server postfix/tlsmgr[31968]: open smtpd TLS cache btree:/var/lib/postfix/smtpd_scache
Dec 20 11:44:46 server postfix/tlsmgr[31968]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
Dec 20 11:44:46 server postfix/smtpd[31966]: connect from mail-wi0-x235.google.com[2a00:1450:400c:c05::235]
Dec 20 11:44:46 server postfix/smtpd[31966]: setting up TLS connection from mail-wi0-x235.google.com[2a00:1450:400c:c05::235]
Dec 20 11:44:46 server postfix/smtpd[31966]: mail-wi0-x235.google.com[2a00:1450:400c:c05::235]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STRENGTH"
Dec 20 11:44:46 server postfix/smtpd[31966]: Anonymous TLS connection established from mail-wi0-x235.google.com[2a00:1450:400c:c05::235]: TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)
openssl s_client -connect localhost:25 -starttls smtp
?Jawaban:
TLDR : Protokol TLS Anda terlalu ketat karena Anda hanya mengizinkan koneksi TLSv1.2.
Dan GMAIL mengirim email ke server Anda dengan protokol TLSv1 . Itu sebabnya negosiasi TLS gagal.
Solusi yang jelas adalah memungkinkan protokol TLSv1 dan TLSv1.1 dan masih menonaktifkan (tidak aman) protokol SSLv2 dan SSLv3.
Penjelasan
Saya dapat mengonfirmasi kasus Anda ketika gagal menerima email dari GMAIL dan FACEBOOK melalui STARTTLS .
Mengapa hanya GMAIL yang gagal mengirim email ke server saya
Ini adalah cuplikan maillog ketika GMAIL mengirim email
Dan ini adalah cuplikan maillog ketika FACEBOOK mengirim email
Beberapa analisis
Jadi, itu menjelaskan mengapa hanya GMAIL yang gagal mengirim email ke server Anda. GMAIL tidak memiliki mekanisme untuk mundur jika negosiasi TLS gagal . Server email lain mungkin menggunakan mekanisme fallback untuk memastikan pengiriman email berhasil.
Mengapa kesalahan Negosiasi TLS terjadi
Saya melihat baris yang menarik dari maillog web.de
Dan cari tahu bahwa Anda menentukan konfigurasi ini di
main.cf
Itu berarti server Anda hanya menerima koneksi TLS ketika TLSv1.2 digunakan. Selain TLSv1.2, server Anda akan mengeluh kesalahan negosiasi TLS.
Jika saya mengubah
smtpd_tls_(mandatory_)protocols
ke!SSLv2,!SSLv3,!TLSv1
, kesalahan masih terjadi. Itu berarti GMAIL dan FACEBOOK akan mencoba menghubungi server surat Anda dengan protokol selain TLSv1.1 dan TLSv1.2.Jika saya beralih
smtpd_tls_(mandatory_)protocols
ke!SSLv2,!SSLv3
, negosiasi TLS akan berhasil. Ini mengkonfirmasi bahwa GMAIL dan FACEBOOK akan menghubungi server Anda dengan protokol TLSv1Orang lain di forum FreeBSD juga mengkonfirmasi perilaku ini.
Larutan
Solusi yang jelas adalah mengaktifkan TLSv1 dan TLSv1.1 di postfix Anda. Ini akan memastikan beberapa server email yang tidak memiliki mekanisme cadangan - seperti GMAIL - masih dapat berkomunikasi dengan server Anda.
Saya tidak tahu alasan Anda untuk menonaktifkan dukungan TLSv1 dan TLSv1.1, hanya menyisakan protokol TLSv1.2. Jika itu adalah server web dan pengguna Anda akan menggunakan browser modern saja, maka Anda dapat menonaktifkan TLSv1 di server Anda. Ini dapat diterima karena hanya browser yang lebih lama yang tidak mendukung protokol TLSv1 .
sumber
Satu masalah potensial yang bisa saya lihat adalah penggunaan sertifikat yang ditandatangani sendiri seperti yang dilaporkan oleh OpenSSL:
Jika Anda menggunakan sertifikat SSL berbayar, Anda tidak boleh menggunakan sertifikat yang ditandatangani sendiri.
Saya akan memeriksa bahwa file PEM Anda berisi sertifikat berbayar Anda, dan juga memverifikasi bahwa itu berisi rantai sertifikat lengkap.
sumber
code: 19 (self signed certificate)
code 19
pesan jika rantai penuh Anda sedang dilayani. Saya menggunakan sertifikat dari StartSSL, yang memberikan kesalahan yang sama di bagian atas perintah, tetapi karena saya memberikan rantai penuh (termasuk root CA) dalamsmtpd_tls_cert_file
file PEM, klien memiliki semua sertifikat yang diperlukan untuk memvalidasi rantai penuh .