Hallo,
ich habe hier einen Dovecot 2.2.9, der hat seine userdb und passdb gegen LDAP.
LDAP möchte von mir - je nach dem, was ich wissen möchte - gerne ein X.509-Client-Zertifikat sehen (olcTLSVerifyClient: demand). Mit ldapsearch auf der Kommandozeile geht alles. Das sendet das Zertifikat mit (selbe Files in ~/.ldaprc eingetragen, wie hier weiter unten in der Konfigurationsdatei des Dovecot zu sehen ist.)
Dafür gibt es in der entsprechenden Konfigurationsdatei bei Dovecot auch nicht weiter dokumentierte Parameter.
dovecot-ldap.conf.ext --------------------- uris = ldaps://<host>/ # tls = yes tls_cert_file = /etc/ssl/certs/<key> tls_key_file = /etc/ssl/private/<key>
Aber diese zwei tls_*_file Options interessieren Dovecot nicht. Wie auch weitere tls_* Options. Das führt dazu, dass der Server die Verbindung beendet, weil er ein Zertifikat anfordert und nur eine leere Antwort bekommt. (Kann man mit Wireshark sehr schön sehen.)
Wenn man statt ldaps ldap+tls macht:
uris = ldap://<host>/ tls = yes tls_cert_file = /etc/ssl/certs/<key> tls_key_file = /etc/ssl/private/<key>
bricht die Verbindung sehr zeitig mit einem TLS-Fehler ab, diesmal schon eher, nachdem der Client Client STARTTLS gewünscht hat, der Server dem stattgibt und dann eigentlich ein SSLvX ClientHello kommen müsste.
Ach so… Dovecot ist in der Gruppe ssl-cert mit drin und /etc/ssl/private ist für root:ssl-cert x- und lesbar. Aber eigentlich behauptet die Doku (darf mein ein Wiki Doku nennen?), dass die Konfigurationsfiles mit Root-Rechten gelesen werden.
Dovecot scheint gegen OpenSSL gelingt zu sein (libssl taucht bei ldd auf), aber die Debugmeldungen, die man bekommen kann, wenn man in der oben erwähnten Datei debug_level =-1 einträgt, deuten eher auf GnuTLS.
Any ideas? Bitte nicht den Kopf zerbrechen. Ich habe die Antwort schon, muss nur erstmal los und schreibe sie nachher auf, damit ich oder wer anders das hoffentlich mal in den Archiven findet.
Best regards from Dresden/Germany Viele Grüße aus Dresden Heiko Schlittermann
Hallo,
wie versprochen die Auflösung: Und hoffentlich finde ich das auch, wenn ich in zwei Jahren wieder das Problem habe und es mir nicht mal bekannt vorkommt. (@Google: I meant you ;))
Heiko Schlittermann hs@schlittermann.de (Do 08 Okt 2015 17:12:57 CEST):
ich habe hier einen Dovecot 2.2.9, der hat seine userdb und passdb gegen
Wie es aussieht, ist das auch in 2.2.13 noch kaputt. Ein einfcher schneller Fix kann sein:
--- dovecot-2.2.9/src/auth/db-ldap.c 2013-11-24 14:37:39.000000000 +0100 +++ dovecot-2.2.9.hs12/src/auth/db-ldap.c 2015-10-08 21:24:47.051446465 +0200 @@ -1043,7 +1043,7 @@
static void db_ldap_set_tls_options(struct ldap_connection *conn) { - if (!conn->set.tls) + if (!(conn->set.tls || strncmp(conn->set.uris, "ldaps:", 6) == 0)) return;
#ifdef OPENLDAP_TLS_OPTIONS
Dann werden die tls_* settings auch bei einer ldaps:// URI aktiv.
Dann müssen nur noch die Files mit Key und Cert lesbar sein. Dass Dovecot in der Gruppe ssl-cert ist, hilft nicht weiter. (Der Key ist nur für root:ssl-cert zugänglich). Denn Dovecot liest als Root die *CONFIG* Files, und weiss also, dann, wie das Key- und Cert-File heissen.
Diese Parameter übergibt er an die LDAP-Client-Bibliothek (die im übrigen gegen GnuTLS gelinkt ist, Dovecot für seinen Teil gegen OpenSSL), und wenn der die Verbindung zum LDAP-Server aufbaut (also wenn die Library die Verbindung aufbaut), dann ist er nicht mehr Root. Und um initgroups() kümmert er sich nicht, also läuft der Prozess als dovecot:dovecot. Und kann dann natürlich die Files nicht lesen.
Aber in der dovecot.conf kann man im auth-service
extra_groups = ssl-cert
eintragen.
Gibt es eigentlich sowas wie eine Referenz-Dokumentation für Dovecot, oder sind das Wiki und unvollständige Manpages wirklich alles?
Best regards from Dresden/Germany Viele Grüße aus Dresden Heiko Schlittermann
2015-10-08 21:33 GMT+02:00 Heiko Schlittermann hs@schlittermann.de:
Hallo,
wie versprochen die Auflösung: Dann werden die tls_* settings auch bei einer ldaps:// URI aktiv.
Danke für den Tip. Ich habe selbst zwei Dovecots laufen, bin aber (noch) nicht auf diesen Fehler gestoßen, da dort der LDAP-Verkehr unverschlüsselt über localhost läuft.
Gibt es eigentlich sowas wie eine Referenz-Dokumentation für Dovecot, oder sind das Wiki und unvollständige Manpages wirklich alles?
Die Dovecot-Anleitung stellt sich eigentlich selbst den Anspruch "Was da nicht geschrieben steht, gibt es auch nicht".
Den geballten Erfahrungsschatz aus der Praxis gibt es in http://www.dovecot-buch.de/ - aus meiner Sicht sehr zu empfehlen.
William Epler william.epler@globalfoundries.com (Fr 09 Okt 2015 09:18:25 CEST): …
Danke für den Tip. Ich habe selbst zwei Dovecots laufen, bin aber (noch) nicht auf diesen Fehler gestoßen, da dort der LDAP-Verkehr unverschlüsselt über localhost läuft.
Gibt es eigentlich sowas wie eine Referenz-Dokumentation für Dovecot, oder sind das Wiki und unvollständige Manpages wirklich alles?
Die Dovecot-Anleitung stellt sich eigentlich selbst den Anspruch "Was da nicht geschrieben steht, gibt es auch nicht".
Darum steht dann dort: http://wiki2.dovecot.org/AuthDatabase/LDAP
You can enable TLS in two alternative ways: Connect to ldaps port (636) by using "ldaps" protocol, e.g. uris = ldaps://secure.domain.org Connect to ldap port (389) and use STARTTLS command. Use tls=yes to enable this. See the tls_* settings in dovecot-ldap-example.conf for how to configure TLS. (I think they apply to ldaps too?)
So stellt man sich Referenz-Dokumentation vor?
Den geballten Erfahrungsschatz aus der Praxis gibt es in http://www.dovecot-buch.de/ - aus meiner Sicht sehr zu empfehlen.
Ich suche kein Praxis-Buch, sondern ein eher „technical feference manual“. (Auch auf die Gefahr, mich zu wiederholen oder OT zu sein: http://www.exim.org/exim-html-current/doc/html/spec_html/ ist für mich etwas, was das Attribut „Referenz“ verdient.)
Best regards from Dresden/Germany Viele Grüße aus Dresden Heiko Schlittermann
Moin Heiko,
Gibt es eigentlich sowas wie eine Referenz-Dokumentation für Dovecot, oder sind das Wiki und unvollständige Manpages wirklich alles?
Eine rhetorische Frage oder? Selbst das Buch vom Peer Heinlein geht weder bei TLS noch bei LDAP so weit in die Tiefe.
ldaps != ldap mit STARTTLS - und - ldaps is deprecated
Wie groß da das Interesse ist das zu fixen? Aber wenn man es supportet, sollte es auch gehen.
Mit freundlichen Grüßen / Kind regards Ronny Seffner -- Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen www.seffner.de | ronny@seffner.de | +49 35245 72950 7EA62E22D9CC4F0B74DCBCEA864623A568694DB8
Moin,
Ronny Seffner ronny@seffner.de (Fr 09 Okt 2015 09:46:51 CEST):
Moin Heiko,
Gibt es eigentlich sowas wie eine Referenz-Dokumentation für Dovecot, oder sind das Wiki und unvollständige Manpages wirklich alles?
Eine rhetorische Frage oder? Selbst das Buch vom Peer Heinlein geht weder bei TLS noch bei LDAP so weit in die Tiefe.
ldaps != ldap mit STARTTLS
- und -
ldaps is deprecated
… steht wo? Bei Heinlein? Ach, nein, bei http://www.openldap.org/faq/data/cache/605.html
Wie groß da das Interesse ist das zu fixen? Aber wenn man es supportet, sollte es auch gehen.
Ja. Mal sehen, ob es gefixt wird.
Best regards from Dresden/Germany Viele Grüße aus Dresden Heiko Schlittermann
lug-dd@mailman.schlittermann.de