Re: Replikation über SSL: Received invalid SSL certificate: unable to get local issuer certificate

Jan Friedrichs jan at janf.net
Sa Jul 14 13:39:05 CEST 2018


hi,  teste doch mal ssl cert das cert.pem und als ca file  das fullchain  
Grüße Jan
-------- Ursprüngliche Nachricht --------Von: Lukas <lukas.meuerer at gmail.com> Datum: 14.07.18  12:44  (GMT+01:00) An: dovecot at listen.jpberlin.de Betreff: Replikation über SSL: Received invalid SSL certificate: unable to get local issuer certificate 
Hallo,

ich versuche die Replikation über TCP mit SSL zwischen zwei Dovecot 2.2.10 Servern auf RHEL 7.5 zum Laufen zu bekommen.

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:

Jul 14 08:57:40 server1 dovecot: doveadm(lukas): Received invalid SSL certificate: unable to get local issuer certificate: /CN=server2.domain.tld
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
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

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:

# openssl s_client -connect server1.domain.tld:12345
CONNECTED(00000003)
depth=0 CN = server1.domain.tld
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = server1.domain.tld
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=server1.domain.tld
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---

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 https://letsencrypt.org/certificates/ runtergeladen und "ssl_client_ca_file" auf die Datei gesetzt. Dann ändert sich der Fehler auf:
doveadm(lukas): Received invalid SSL certificate: unable to get issuer certificate: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3

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:

# openssl s_client -connect server1.domain.tld:12345 -CAfile /etc/dovecot/lets-encrypt-x3-cross-signed.pem.txt
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = server1.domain.tld
verify return:1
---
Certificate chain
 0 s:/CN=server1.domain.tld
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---

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.

Ich habe schon mehrfach alles mit dem Artikel über Replikation im Wiki und anderen Webseiten abgegleichen, aber finde leider keine Lösung.

Grüße
Lukas




# 2.2.10: /etc/dovecot/dovecot.conf
# OS: Linux 3.10.0-862.6.3.el7.x86_64 x86_64 Red Hat Enterprise Linux Server release 7.5 (Maipo) xfs
auth_mechanisms = plain login
auth_username_format = %n
doveadm_password = ein_langes_sicheres_passwort
doveadm_port = 12345
first_valid_uid = 97
mail_gid = dovecot
mail_home = /var/spool/dovecot/%u
mail_location = sdbox:/var/spool/dovecot/%u
mail_plugins = " notify replication"
mail_uid = dovecot
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Spam {
    auto = subscribe
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix = 
}
passdb {
  args = scheme=SSHA512 username_format=%n /etc/dovecot/passwd
  driver = passwd-file
}
plugin {
  mail_replica = tcps:server2.domain.tld:12345
  replication_sync_timeout = 2
}
service auth {
  unix_listener auth-userdb {
    mode = 0600
  }
}
service doveadm {
  inet_listener {
    port = 12345
    ssl = yes
  }
}
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    address = 62.x.x.x,2a03:x:x:x:x:x:x:x
    port = 993
  }
}
service lmtp {
  inet_listener lmtp {
    address = localhost
    port = 7124
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    address = 62.x.x.x,2a03:x:x:x:x:x:x:x
    port = 995
  }
}
service replicator {
  process_min_avail = 1
  unix_listener replicator-doveadm {
    mode = 0660
  }
}
ssl = required
ssl_cert = </etc/letsencrypt/live/server1.domain.tld/fullchain.pem
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
ssl_client_ca_file = /etc/pki/tls/cert.pem
ssl_key = </etc/letsencrypt/live/server1.domain.tld/privkey.pem
ssl_prefer_server_ciphers = yes
ssl_protocols = !SSLv3 !SSLv2
userdb {
  args = username_format=%n /etc/dovecot/passwd
  driver = passwd-file
  result_failure = return-fail
  result_internalfail = return-fail
}


-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://listen.jpberlin.de/pipermail/dovecot/attachments/20180714/c0bd970b/attachment.html>


Mehr Informationen über die Mailingliste Dovecot