GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Probleme mit dem Attribut des LDAP-Benutzerzertifikats?

Ich versuche, das Attribut „userCertificate“ zu verwenden, um eine „der“-Datei zu speichern.
Ich kann mein Zertifikat gerne mit ldif hinzufügen:

dn:cn=bob,ou=users,dc=home
changetype:modify
add:userCertificate;binary
userCertificate;binary:

Ich sehe mein Zertifikat in Base64-Codierung, wenn ich eine LDAP-Suche durchführe, und das Leben scheint gut zu sein. Aber wenn ich versuche, ldapcompare zu verwenden:

ldapcompare -D „cn=admin,dc=home“ -W „cn=bob,ou=users,dc=home“ „userCertificate;binary:

Ich bekomme den Fehler:

Vergleichsergebnis:Ungültige Syntax (21)
Zusätzliche Informationen:Wert für Übereinstimmung kann nicht normalisiert werden
UNDEFINED

Ich erhalte denselben Fehler, wenn ich versuche, mit der base64-Codierung zu vergleichen

ldapcompare -D „cn=admin,dc=home“ -W „cn=bob,ou=users,dc=home“ „userCertificate::base64encodedStringOfStuff“

Irgendwelche Ideen?

Akzeptierte Antwort:

Ich bekomme nur diesen Fehler:ldap_modify:Undefinierter Attributtyp (17) zusätzliche Informationen:Benutzerzertifikat:erfordert;Binärübertragung.

Diese Fehlermeldung bezieht sich ziemlich eindeutig auf das, was in RFC 4523, Abschnitt 2.1 vorgeschrieben ist. Sie müssen einfach immer ;binary anhängen zum Attributnamen in allen LDAP-Operationen, die das Attribut userCertificate betreffen .

ldap_msgfree ldap_err2string Vergleichsergebnis:Ungültige Syntax (21) Zusätzliche Informationen:Wert kann nicht für Übereinstimmung mit UNDEFINED normalisiert werden

Bei der Verwendung von Vergleichsoperationen müssen Sie auf die GLEICHHEIT achten Übereinstimmungsregel ist für das Assertion-Attribut verfügbar.

Im Unterschema userCertificate wird mit EQUALITY certificateExactMatch deklariert basierend auf dem Ausstellernamen und der Seriennummer (siehe RFC 4523 Abschnitt 2.5), was bedeutet, dass für dieses Attribut kein reiner Oktett-String-Match verfügbar ist.

Sie müssen also die dezimale Seriennummer und den Aussteller-DN (LDAP-String-Darstellung) aus dem Zertifikat extrahieren:

$ openssl x509 -noout -nameopt rfc2253 -serial -issuer -inform der -in ~/certs/[email protected] 
serial=0F560E
issuer=CN=StartCom Class 1 Primary Intermediate Client CA,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL

Wandeln Sie hexadezimal seriell in dezimal um, was 1005070 ist in diesem Beispiel und rufen Sie ldapcompare auf so:

ldapcompare "cn=Michael Strö[email protected],dc=stroeder,dc=de" 'userCertificate;binary:{ serialNumber 1005070, issuer "cn=StartCom Class 1 Primary Intermediate Client CA,ou=Secure Digital Certificate Signing,o=StartCom Ltd.,c=IL"}'
TRUE

Zusätzliche Anmerkungen:

  • Seien Sie sich bewusst, dass DNs komplexe Bestien sind, bei denen Sonderzeichen
    maskiert werden müssen, die in der Shell-Befehlszeile besonders behandelt werden müssen.
    Daher würde ich für diese Aufgabe eine Skriptsprache verwenden, um dies zu vermeiden
    einige der Probleme.
  • Im Gegensatz zu Änderungsoperationen und zum Abrufen von Attributen benötigen Sie den ;binary nicht Übertragungsart für Vergleichsoperation. Aber mit OpenLDAP wird es auch nicht schaden. Bei anderen Implementierungen von LDAP-Servern bin ich mir nicht sicher.
Verwandt:IPhone / iPod / iPad Synchronisierungsprobleme?
Linux
  1. Kernel-Tracing mit trace-cmd

  2. Probleme mit Cryptsetup während des Updates?

  3. Probleme mit Eclipse und Android SDK?

  4. Probleme mit Ubuntu über Crouton auf Chromebook?

  5. Probleme beim Kompilieren von Imagemagick mit Heic?

Konfigurieren Sie OpenLDAP mit SSL auf CentOS 7 / RHEL 7

LDAP-Server

So durchsuchen Sie LDAP mit ldapsearch (mit Beispielen)

Probleme mit TTF-Font-Rendering unter Libreoffice?

Chrome/ium-Rendering-Probleme mit Intel-Grafik?

So installieren Sie den LDAP 389-Verzeichnisserver unter Linux mit detaillierten Schritten