LDAPS (LDAP over TLS/SSL): Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
;Wir befinden uns auf dem LDAP Server. | ;Wir befinden uns auf dem LDAP Server. | ||
;Dort kommt KEY und CERT rein. | ;Dort kommt KEY und CERT rein. | ||
| − | =Wir holen uns ein Zertifkat une ein Schlüssel= | + | ==Wir holen uns ein Zertifkat une ein Schlüssel== |
*wget https://xinux.de/downloads/script/get-cert.sh | *wget https://xinux.de/downloads/script/get-cert.sh | ||
*chmod +x get-cert.sh | *chmod +x get-cert.sh | ||
*get-cert.sh | *get-cert.sh | ||
| − | =Sie liegen unter /etc/ssl/= | + | ==Sie liegen unter /etc/ssl/== |
;Das Zertifilat | ;Das Zertifilat | ||
/etc/ssl/own.crt | /etc/ssl/own.crt | ||
;Der private Schlüssel | ;Der private Schlüssel | ||
/etc/ssl/own.key | /etc/ssl/own.key | ||
| − | = Rechte für den slapd anpassen = | + | == Rechte für den slapd anpassen == |
Der User openldap muss den privaten Schlüssel lesen können: | Der User openldap muss den privaten Schlüssel lesen können: | ||
*chown openldap:openldap /etc/ssl/own.crt /etc/ssl/own.key | *chown openldap:openldap /etc/ssl/own.crt /etc/ssl/own.key | ||
*chmod 640 /etc/ssl/own.key | *chmod 640 /etc/ssl/own.key | ||
| − | = LDIF-Datei für die TLS-Konfiguration erstellen = | + | == LDIF-Datei für die TLS-Konfiguration erstellen == |
*vi /root/tls_config.ldif | *vi /root/tls_config.ldif | ||
dn: cn=config | dn: cn=config | ||
| Zeile 26: | Zeile 26: | ||
olcTLSCertificateKeyFile: /etc/ssl/own.key | olcTLSCertificateKeyFile: /etc/ssl/own.key | ||
| − | = Konfiguration einspielen = | + | == Konfiguration einspielen == |
Die Änderung direkt in die cn=config schreiben: | Die Änderung direkt in die cn=config schreiben: | ||
*ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /root/tls_config.ldif | *ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /root/tls_config.ldif | ||
| − | = Ports in /etc/default/slapd anpassen = | + | == Ports in /etc/default/slapd anpassen == |
Sicherstellen, dass ldaps aktiviert ist: | Sicherstellen, dass ldaps aktiviert ist: | ||
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" | SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" | ||
| − | = Dienst neu starten = | + | == Dienst neu starten == |
*systemctl restart slapd | *systemctl restart slapd | ||
| − | =Ports prüfen= | + | ==Ports prüfen== |
*ss -4lntp | grep slapd | *ss -4lntp | grep slapd | ||
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=788,fd=10)) | LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=788,fd=10)) | ||
| Zeile 45: | Zeile 45: | ||
*openssl s_client -connect ldap.it213.int:636 -showcerts | *openssl s_client -connect ldap.it213.int:636 -showcerts | ||
=Nun zu den Clients= | =Nun zu den Clients= | ||
| + | == Funktionstest == | ||
| + | Prüfen, ob der Server das Zertifikat auf Port 636 ausliefert: | ||
| + | *openssl s_client -connect ldap.it213.int:636 -showcerts | ||
| + | == SSSD Konfiguration auf TLS umstellen == | ||
| + | Da der Server nun Zertifikate ausliefert, wird die Verschlüsselung auf den Clients in der aktiviert: | ||
| + | *vi /etc/sssd/sssd.conf | ||
| + | [sssd] | ||
| + | config_file_version = 2 | ||
| + | services = nss, pam, sudo | ||
| + | domains = it213.int | ||
| + | |||
| + | [domain/it213.int] | ||
| + | id_provider = ldap | ||
| + | auth_provider = ldap | ||
| + | chpass_provider = ldap | ||
| + | access_provider = permit | ||
| + | sudo_provider = ldap | ||
| + | |||
| + | <span style="color:red">ldap_uri = ldaps://ldap.it213.int</span> | ||
| + | dns_discovery_domain = it213.int | ||
| + | |||
| + | ldap_search_base = dc=it213,dc=int | ||
| + | ldap_sudo_search_base = ou=sudo,dc=it213,dc=int | ||
| + | |||
| + | ldap_default_bind_dn = cn=admin,dc=it213,dc=int | ||
| + | ldap_default_authtok = 123Start$ | ||
| + | |||
| + | cache_credentials = True | ||
| + | <span style="color:red">ldap_id_use_start_tls = false</span> | ||
| + | <span style="color:blue"># ldap_auth_disable_tls_never_use_in_production = true</span> | ||
| + | <span style="color:red">ldap_tls_reqcert = hard</span> | ||
| + | |||
| + | [nss] | ||
| + | filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,www-data,backup,list,irc,gnats,nobody,systemd-network,systemd-resolve,messagebus,_apt,uuidd,nslcd | ||
| + | filter_groups = root,daemon,bin,sys,adm,tty,disk,lp,mail,news,uucp,man,proxy,kmem,dialout,fax,voice,cdrom,floppy,tape,sudo,audio,dip,www-data,backup,operator,list,irc,src,gnats,shadow,utmp,video,sasl,plugdev,staff,games,users,nogroup,systemd-journal,systemd-network,systemd-resolve,input,kvm,render,crontab,netdev,messagebus,_apt,uuidd,ssh,nslcd | ||
| + | |||
| + | [pam] | ||
| + | offline_credentials_expiration = 2 | ||
| + | |||
| + | = Dienst neu starten = | ||
| + | Damit die TLS-Einstellungen geladen werden: | ||
| + | *systemctl restart sssd | ||
| + | |||
| + | = Verbindungstest = | ||
| + | Prüfen, ob die Benutzerauflösung über den verschlüsselten Kanal weiterhin funktioniert: | ||
| + | *getent passwd thomas | ||
| + | |||
| + | = Status prüfen = | ||
| + | Falls es Probleme gibt, hilft das SSSD-Tool: | ||
| + | *sssctl domain-status it213.int | ||
| + | == Analyse des Netzwerkverkehrs == | ||
| + | Um sicherzugehen, dass die Kommunikation tatsächlich verschlüsselt über Port 636 erfolgt, nutzen wir tcpdump auf dem Client: | ||
| + | *tcpdump -i any -nn port 636 | ||
| + | 14:29:33.586737 IP 172.26.213.99.52646 > 10.213.1.3.636: Flags [P.], seq 1:759, ack 3951, win 501, options [nop,nop,TS val 2702684736 ecr 3149566692], length 758 | ||
| + | 14:29:33.586816 IP 10.213.1.3.636 > 172.26.213.99.52646: Flags [P.], seq 4795:4831, ack 759, win 504, options [nop,nop,TS val 3149566694 ecr 2702684736], length 36 | ||
| + | |||
| + | == Auswertung == | ||
| + | ; Port 636 | ||
| + | Die Pakete gehen gezielt an den LDAPS-Port. | ||
| + | ; Flags [P.] | ||
| + | Das "Push"-Flag mit einer "length > 0" zeigt den Austausch von verschlüsselten Anwendungsdaten nach dem TLS-Handshake. | ||
| + | ; Keine Klartextdaten | ||
| + | Im Gegensatz zu Port 389 sind hier keine Benutzernamen oder Passwörter im Dump lesbar. | ||
Aktuelle Version vom 2. April 2026, 12:32 Uhr
Wo sind wir?
- Wir befinden uns auf dem LDAP Server.
- Dort kommt KEY und CERT rein.
Wir holen uns ein Zertifkat une ein Schlüssel
- wget https://xinux.de/downloads/script/get-cert.sh
- chmod +x get-cert.sh
- get-cert.sh
Sie liegen unter /etc/ssl/
- Das Zertifilat
/etc/ssl/own.crt
- Der private Schlüssel
/etc/ssl/own.key
Rechte für den slapd anpassen
Der User openldap muss den privaten Schlüssel lesen können:
- chown openldap:openldap /etc/ssl/own.crt /etc/ssl/own.key
- chmod 640 /etc/ssl/own.key
LDIF-Datei für die TLS-Konfiguration erstellen
- vi /root/tls_config.ldif
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/own.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/own.key
Konfiguration einspielen
Die Änderung direkt in die cn=config schreiben:
- ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /root/tls_config.ldif
Ports in /etc/default/slapd anpassen
Sicherstellen, dass ldaps aktiviert ist:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Dienst neu starten
- systemctl restart slapd
Ports prüfen
- ss -4lntp | grep slapd
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=788,fd=10))
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=788,fd=7))
Funktionstest
Prüfen, ob der Server das Zertifikat auf Port 636 ausliefert:
- openssl s_client -connect ldap.it213.int:636 -showcerts
Nun zu den Clients
Funktionstest
Prüfen, ob der Server das Zertifikat auf Port 636 ausliefert:
- openssl s_client -connect ldap.it213.int:636 -showcerts
SSSD Konfiguration auf TLS umstellen
Da der Server nun Zertifikate ausliefert, wird die Verschlüsselung auf den Clients in der aktiviert:
- vi /etc/sssd/sssd.conf
[sssd] config_file_version = 2 services = nss, pam, sudo domains = it213.int [domain/it213.int] id_provider = ldap auth_provider = ldap chpass_provider = ldap access_provider = permit sudo_provider = ldap ldap_uri = ldaps://ldap.it213.int dns_discovery_domain = it213.int ldap_search_base = dc=it213,dc=int ldap_sudo_search_base = ou=sudo,dc=it213,dc=int ldap_default_bind_dn = cn=admin,dc=it213,dc=int ldap_default_authtok = 123Start$ cache_credentials = True ldap_id_use_start_tls = false # ldap_auth_disable_tls_never_use_in_production = true ldap_tls_reqcert = hard [nss] filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,www-data,backup,list,irc,gnats,nobody,systemd-network,systemd-resolve,messagebus,_apt,uuidd,nslcd filter_groups = root,daemon,bin,sys,adm,tty,disk,lp,mail,news,uucp,man,proxy,kmem,dialout,fax,voice,cdrom,floppy,tape,sudo,audio,dip,www-data,backup,operator,list,irc,src,gnats,shadow,utmp,video,sasl,plugdev,staff,games,users,nogroup,systemd-journal,systemd-network,systemd-resolve,input,kvm,render,crontab,netdev,messagebus,_apt,uuidd,ssh,nslcd [pam] offline_credentials_expiration = 2
Dienst neu starten
Damit die TLS-Einstellungen geladen werden:
- systemctl restart sssd
Verbindungstest
Prüfen, ob die Benutzerauflösung über den verschlüsselten Kanal weiterhin funktioniert:
- getent passwd thomas
Status prüfen
Falls es Probleme gibt, hilft das SSSD-Tool:
- sssctl domain-status it213.int
Analyse des Netzwerkverkehrs
Um sicherzugehen, dass die Kommunikation tatsächlich verschlüsselt über Port 636 erfolgt, nutzen wir tcpdump auf dem Client:
- tcpdump -i any -nn port 636
14:29:33.586737 IP 172.26.213.99.52646 > 10.213.1.3.636: Flags [P.], seq 1:759, ack 3951, win 501, options [nop,nop,TS val 2702684736 ecr 3149566692], length 758 14:29:33.586816 IP 10.213.1.3.636 > 172.26.213.99.52646: Flags [P.], seq 4795:4831, ack 759, win 504, options [nop,nop,TS val 3149566694 ecr 2702684736], length 36
Auswertung
- Port 636
Die Pakete gehen gezielt an den LDAPS-Port.
- Flags [P.]
Das "Push"-Flag mit einer "length > 0" zeigt den Austausch von verschlüsselten Anwendungsdaten nach dem TLS-Handshake.
- Keine Klartextdaten
Im Gegensatz zu Port 389 sind hier keine Benutzernamen oder Passwörter im Dump lesbar.