Stand: 27. Jan. 2020 LDAP clients mit SSL/TLS support für Linux und Windows ====================================================== LDAP-Server, insbesondere Microsoft Active Directory, können eine gesichterte Client-Verbindung erlauben und/oder erzwingen. Papageno-Programme mit LDAP-Abfragen sind SMTP-Gateway und Treiber (gendrv) sowie die Testprogramme gdrestest und sgrestest. Ab Version 6.0.3.0 sind diese mit OpenSSL-Support gebildet. Files im Patch: Linux: bin/gdrestest bin/sgrestest bin/libcrypto.so.1.0.1e bin/libssl.so.10 driver/gendrv/bin/gendrv, capidrv.dll, mdmdrv.dll, smsdrv.dll, screxe gateway/smtp/daemon, gateway, restest (hard link) etc/sandboxrun Windows: bin/gdrestest.exe bin/sgrestest.exe bin/libcrypto-1_1.dll bin/libssl-1_1.dll driver/gendrv/bin/gendrv.exe, capidrv.dll, mdmdrv.dll, smsdrv.dll, screxe.exe libcint.dll gateway/smtp/daemon.exe, gateway.exe, restext.exe, umgwrep.exe, readme, README.TXT 1. Libraries: ------------- Zur Laufzeit müssen die passenden Shared Libraries ssl und crypto gefunden und geladen werden. Die Dateien werden in (FAXROOT)/bin mitgeliefert (s.o). Windows: libcrypto-1_1.dll libssl-1_1.dll Auf Windows werden Libraries im PATH gesucht, damit sind alle Abhängigkeiten ohne weiteres Zutun befriedigt ($FAXROOT/bin ist seit jeher im PATH). (weiter mit 2. Konfiguration Zertifikate) Linux: Test ob Libs gefunden werden: ----------------------------- sgrestest oder gdrestest (ohne Argumente, liefert usage) Build-Maschine ist CentOS6.9. Damit ist die verwendete Version von openssl festgelegt. libcrypto.so.10 und libssl.so.10 zeigen als Softlink auf die eigentlichen Libraries. Bei einigen Systemen gehören diese Dateien zum Systemumfang. Für CentOS 6 und 7 können diese installiert werden (yum install openssl-lib:i686) (weiter mit 2. Konfiguration Zertifikate) Bei Ubuntu (ab 14.04) muss libssl:i386 installiert wegen weiterer Abhängigkeiten. (apt-get install libssl:i368) Die Version von OpenSSL passt aber nicht, daher werden die Libraries aus $FAXROOT/bin benötigt. 1.1. Bekanntmachung der Libraries: ---------------------------------- Damit Treiber oder SMTP-Gateway starten können, müssen die Libraries gefunden werden. 1.1.1 Möglichkeit 1: Aufnahme der Libraries in /etc/ld.so.cache Zum Einrichten sind Root-Rechte erforderlich. Sie benötigen die FAXROOT. (als comfax) echo $FAXROOT (als root) FAXROOT=/path/to/faxroot (wie von comfax ausgegeben) echo $FAXROOT/bin >/etc/ld.so.conf.d/papageno.conf ldconfig LD_LIBRARY_PATH wird nicht benötigt, ein Neustart des Lambda ist nicht erforderlich. Sollte das nicht gewünscht sein, gibt es eine weitere Möglichkeit, wenn smtp/daemon nicht root-Rechte benötigt (wegen Port 25). 1.1.2 Möglichket 2: LD_LIBRARY_PATH mit Neustart des Lambda-Servers Zum Einrichten sind keine root-Rechte erforderlich, die Methode ist aber nur ausreichend, wenn der smtp/daemon nicht root gehört und das S-Bit (setuid) gesetzt hat. Benutzt wird die Env LD_LIBRARY_PATH=$FAXROOT/bin Diese Environment-Variable muss vor dem Start des Lambda z.B. in comfaxdefault gesetzt und exportiert werden. Sie soll in Zukunft vom Lambda (procmon) gesetzt werden, dieser ist aber nicht Bestandteil des patches. sandboxrun muss den LD_LIBRARY_PATH auch setzen und ist deshalb Bestandteil des Patches. 2. Konfiguration Zertifikate ---------------------------- Bei der Verbindung über TLS bekommt der Client vom Server ein Zertifikat. Der Client sucht jetzt ein passendes Root-Zertifikat, um die Gültigkeit des Serverzertifikats zu überprüfen. 2.1 Konfiguration über Papageno Alpha Userconf Setzen Sie den absoluten Pfad auf das Root-Zertifikat für Gateway und Treiber Beispiel für das SMTP-Gateway: SG_LDCERT /etc/ssl/certs/vpcdc01.pem Der Treiber sucht nach GD_LDCERT oder SG_LDCERT. (weiter mit 3. Konfiguration Verschlüsselungstyp) 2.2 ldap.conf Alternativ können Sie ldap.conf benutzen. HINWEIS: Wenn Sie auf dem Papageno-Rechner Openldap bereits für ein anderes Produkt benutzen, sollten Sie nicht die vorhandene ldap.conf ändern, um die funktionierenden Verbindungen nicht zu stören. Benutzen Sie SG_LDCERT. Linux: /etc/ldap/ldap.conf und /etc/openldap/ldap.conf werden automatisch gesucht und eingelesen. Windows: c:\OpenSSL\ldap\ldap.conf und c:\OpenLDAP\sysconf\ldap.conf werden automatisch gesucht und eingelesen. Wenn dieses File einen anderen Ort oder Namen hat oder bekommen soll, können Sie ihn über die Umgebungsvariable LDCONF angeben oder im Gateway oder Treiber konfigurieren. Beispiel: LDCONF=/usr/local/openssl/ldap/ldap.conf Hinweis: LDCONF kann nicht genutzt werden, wenn der smtp/daemon root-Rechte benötigt (wegen Port 25). ldap.conf --------- (Siehe Linux Man-Page) Sie benötigen (mindestens) einen Eintrag, der auf das zum Server passende Root-Zertifikat zeigt. TLS_CACERT oder, allgemeiner, einen Eintrag, der auf das Verzeichnis aller Root-Zertifikate zeigt: TLS_CACERTDIR Das Root-Zertifikat bekommen Sie vom Betreiber des LDAP/AD. Hinweis: wenn Sie TLS_CACERTDIR benutzen, müssen Sie für das neue Zertifikat das Openssl-Kommando c_rehash ausführen. Optional können Sie zunächst auf die Überprüfung des Zertifikats verzichten, das empfehlen wir ausdrücklich NUR als VORÜBERGEHENDEN NOTBEHELF. TLS_REQCERT allow akzeptiert die Verbindung auch, wenn das Zertifikat (noch) nicht verifiziert werden kann. Hinweis für Linux: Das Kommando ldapsearch ist (mindestens für Ubuntu und Debian) mit GNU-TLS gebildet. Leider interpretiert GNU-TLS die ldap.conf etwas anders als openssl. Für einen Test benutzen Sie am einfachsten sgrestest (s.u.) 3. Konfiguration Verschlüsselungstyp ------------------------------------ Grundsätzlich gibt es zwei Möglichkeiten, eine gesicherte Verbindung aufzubauen: ldaps über Port 636 oder ldap mit startTLS. SMTP-Gateway: SG_LDTYPE ldaps oder SG_LDTYPE startTLS Der Default-Wert ist ldap. Der Treiber sucht nach GD_LDTYPE oder SG_LDTYPE. Beachten Sie, dass SG_LDH/GD_LDH genau den Servernamen enthalten muss, den das Zertifikat angibt. Im Allgemeinen ist das der FQDN. IP-Adressen werden i.A. bei der Zertifikatsprüfung nicht akzeptiert. Die Standard-Ports werden selbständig gewählt. 4. Test Verschlüsselung ----------------------- Um zu bestätigen, dass alles richtig eingerichtet ist, benutzen Sie sgrestest oder gdrestest. Beispiel: sgrestest -a test@domain -v (test mit startTLS) 10. 1.20 14:59:39 gwconfig.cpp(208):C: getting configuration data... 10. 1.20 14:59:39 gwconfig.cpp(266):D: Host = myhost 10. 1.20 14:59:39 gwconfig.cpp(267):D: User = smtpgw 10. 1.20 14:59:39 gwconfig.cpp(268):D: MyName = myhost 10. 1.20 14:59:39 resolver.cpp(378):D: using LDAP ldap_url_parse_ext(ldap://vpcdc01.vipcomag.local:389) .... TLS trace: SSL_connect:before/connect initialization TLS trace: SSL_connect:SSLv2/v3 write client hello A TLS trace: SSL_connect:SSLv3 read server hello A TLS certificate verification: depth: 1, err: 0, subject: /DC=local/DC=vipcomag/CN=vipcomag-VPCDC01-CA, issuer: /DC=local/DC=vipcomag/CN=vipcomag-VPCDC01-CA TLS certificate verification: depth: 0, err: 0, subject: /CN=vpcdc01.vipcomag.local, issuer: /DC=local/DC=vipcomag/CN=vipcomag-VPCDC01-CA TLS trace: SSL_connect:SSLv3 read server certificate A TLS trace: SSL_connect:SSLv3 read server key exchange A TLS trace: SSL_connect:SSLv3 read server certificate request A TLS trace: SSL_connect:SSLv3 read server done A TLS trace: SSL_connect:SSLv3 write client certificate A TLS trace: SSL_connect:SSLv3 write client key exchange A TLS trace: SSL_connect:SSLv3 write change cipher spec A TLS trace: SSL_connect:SSLv3 write finished A TLS trace: SSL_connect:SSLv3 flush data TLS trace: SSL_connect:SSLv3 read finished A ... Wenn LDTYPE=ldaps gesetzt wird, ändert sich nur die URL: ldap_url_parse_ext(ldaps://vpcdc01.vipcomag.local:636) Der TLS trace beweist, dass die Verbindung verschlüsselt wurde. Wenn das Server-Zertifikat nicht verifiziert werden kann, werden hier Fehlermeldungen angezeigt. Überprüfen Sie SG_LDCERT oder TLS_CACERT.