<div dir="ltr">Hallo,<br><br>ich versuche die Replikation über TCP mit SSL zwischen zwei Dovecot 2.2.10 Servern auf RHEL 7.5 zum Laufen zu bekommen.<br><br>Sobald die Replikation beginnt oder ich sie z. B. versuche mittels "doveadm replicator replicate lukas" anzustoßen, wird auf dem Server auf dem ich den Befehl ausführe folgendes geloggt:<br><br>Jul 14 08:57:40 server1 dovecot: doveadm(lukas): Received invalid SSL certificate: unable to get local issuer certificate: /CN=server2.domain.tld<br>Jul 14 08:57:40 server1 dovecot: doveadm(lukas): Error: doveadm server disconnected before handshake: Received invalid SSL certificate: unable to get local issuer certificate: /CN=server2.domain.tld<br>Jul 14 08:57:40 server1 dovecot: doveadm(lukas): Error: sync: Disconnected from remote: Received invalid SSL certificate: unable to get local issuer certificate: /CN=server2.domain.tld<br><br>Das Problem liegt wohl in der Zertifikat-Chain. Wenn ich mit openssl auf den dsync Port 12345 connecte sehe ich dass nur das Zertifikat für den Host, nicht aber die volle Chain geliefert wird:<br><br># openssl s_client -connect server1.domain.tld:12345<br>CONNECTED(00000003)<br>depth=0 CN = server1.domain.tld<br>verify error:num=20:unable to get local issuer certificate<br>verify return:1<br>depth=0 CN = server1.domain.tld<br>verify error:num=21:unable to verify the first certificate<br>verify return:1<br>---<br>Certificate chain<br> 0 s:/CN=server1.domain.tld<br>   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3<br>---<br><br>Beide Server haben jedoch in "ssl_client_ca_file" den Pfad zum Zertifikatsbundle von RHEL. Testweise habe ich das IdenTrust cross-signed Intermediate Zertifikat von <a href="https://letsencrypt.org/certificates/">https://letsencrypt.org/certificates/</a> runtergeladen und "ssl_client_ca_file" auf die Datei gesetzt. Dann ändert sich der Fehler auf:<br>doveadm(lukas): Received invalid SSL certificate: unable to get issuer certificate: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3<br><br>Auf der anderen Seite kann openssl die Chain wohl prüfen wenn ich sie mit dem lets-encrypt-x3-cross-signed.pem.txt Intermediate Zertifikat prüfe:<br><br># openssl s_client -connect server1.domain.tld:12345 -CAfile /etc/dovecot/lets-encrypt-x3-cross-signed.pem.txt<br>CONNECTED(00000003)<br>depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3<br>verify return:1<br>depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3<br>verify return:1<br>depth=0 CN = server1.domain.tld<br>verify return:1<br>---<br>Certificate chain<br> 0 s:/CN=server1.domain.tld<br>   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3<br>---<br><br>Beide Server verwenden die unten stehende dovecot.conf Datei. Sie unterscheiden sich nur in den Pfaden zu den jeweils eigenen SSL Keys und Zertifikaten, sowie im "mail_replica" Parameter, der auf den jeweils anderen Host zeigt.<br><br>Ich habe schon mehrfach alles mit dem Artikel über Replikation im Wiki und anderen Webseiten abgegleichen, aber finde leider keine Lösung.<br><br>Grüße<br>Lukas<br><br><br><br><br># 2.2.10: /etc/dovecot/dovecot.conf<br># OS: Linux 3.10.0-862.6.3.el7.x86_64 x86_64 Red Hat Enterprise Linux Server release 7.5 (Maipo) xfs<br>auth_mechanisms = plain login<br>auth_username_format = %n<br>doveadm_password = ein_langes_sicheres_passwort<br>doveadm_port = 12345<br>first_valid_uid = 97<br>mail_gid = dovecot<br>mail_home = /var/spool/dovecot/%u<br>mail_location = sdbox:/var/spool/dovecot/%u<br>mail_plugins = " notify replication"<br>mail_uid = dovecot<br>namespace inbox {<br>  inbox = yes<br>  location = <br>  mailbox Drafts {<br>    auto = subscribe<br>    special_use = \Drafts<br>  }<br>  mailbox Sent {<br>    auto = subscribe<br>    special_use = \Sent<br>  }<br>  mailbox Spam {<br>    auto = subscribe<br>  }<br>  mailbox Trash {<br>    auto = subscribe<br>    special_use = \Trash<br>  }<br>  prefix = <br>}<br>passdb {<br>  args = scheme=SSHA512 username_format=%n /etc/dovecot/passwd<br>  driver = passwd-file<br>}<br>plugin {<br>  mail_replica = tcps:server2.domain.tld:12345<br>  replication_sync_timeout = 2<br>}<br>service auth {<br>  unix_listener auth-userdb {<br>    mode = 0600<br>  }<br>}<br>service doveadm {<br>  inet_listener {<br>    port = 12345<br>    ssl = yes<br>  }<br>}<br>service imap-login {<br>  inet_listener imap {<br>    port = 0<br>  }<br>  inet_listener imaps {<br>    address = 62.x.x.x,2a03:x:x:x:x:x:x:x<br>    port = 993<br>  }<br>}<br>service lmtp {<br>  inet_listener lmtp {<br>    address = localhost<br>    port = 7124<br>  }<br>}<br>service pop3-login {<br>  inet_listener pop3 {<br>    port = 0<br>  }<br>  inet_listener pop3s {<br>    address = 62.x.x.x,2a03:x:x:x:x:x:x:x<br>    port = 995<br>  }<br>}<br>service replicator {<br>  process_min_avail = 1<br>  unix_listener replicator-doveadm {<br>    mode = 0660<br>  }<br>}<br>ssl = required<br>ssl_cert = </etc/letsencrypt/live/server1.domain.tld/fullchain.pem<br>ssl_cipher_list = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384<br>ssl_client_ca_file = /etc/pki/tls/cert.pem<br>ssl_key = </etc/letsencrypt/live/server1.domain.tld/privkey.pem<br>ssl_prefer_server_ciphers = yes<br>ssl_protocols = !SSLv3 !SSLv2<br>userdb {<br>  args = username_format=%n /etc/dovecot/passwd<br>  driver = passwd-file<br>  result_failure = return-fail<br>  result_internalfail = return-fail<br>}<br><br></div>