GNU/Linux >> Linux Esercitazione >  >> Linux

Problemi con l'attributo del certificato utente Ldap?

Sto cercando di utilizzare l'attributo "userCertificate" per contenere un file "der".
Posso aggiungere felicemente il mio certificato utilizzando ldif:

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

Vedo il mio certificato nella codifica base64 quando eseguo un ldapsearch e la vita sembra buona. Ma quando provo a usare ldapcompare:

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

Ottengo l'errore:

Confronta Risultato:Sintassi non valida (21)
Informazioni aggiuntive:impossibile normalizzare il valore per la corrispondenza
UNDEFINED

Ottengo lo stesso errore se provo a confrontare usando la codifica base64

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

Qualche idea?

Risposta accettata:

Ho appena ricevuto questo errore:ldap_modify:tipo di attributo non definito (17) informazioni aggiuntive:usercertificate:richiede;trasferimento binario.

Questo messaggio di errore si riferisce abbastanza chiaramente a ciò che è obbligatorio nella RFC 4523, sezione 2.1. Devi semplicemente aggiungere sempre ;binary al nome dell'attributo in tutte le operazioni LDAP che interessano l'attributo userCertificate .

ldap_msgfree ldap_err2string Risultato di confronto:sintassi non valida (21) Informazioni aggiuntive:impossibile normalizzare il valore per la corrispondenza UNDEFINED

Quando usi l'operazione di confronto devi guardare quale UGUAGLIANZA la regola di corrispondenza è disponibile per l'attributo asserzione.

Nel sottoschema userCertificate è dichiarato con EQUALITY certificateExactMatch in base al nome dell'emittente e al numero di serie (vedi RFC 4523 sezione 2.5), il che significa che non è disponibile una corrispondenza di stringa di ottetto puro per quell'attributo.

Quindi è necessario estrarre dal certificato il numero di serie decimale e il DN dell'emittente (rappresentazione della stringa LDAP):

$ 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

Converti seriale esadecimale in decimale che è 1005070 in questo esempio e invocare ldapcompare così:

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

Note aggiuntive:

  • Tieni presente che i DN sono bestie complesse con l'escape di caratteri
    speciali che richiedono un trattamento speciale sulla riga di comando della shell.
    Pertanto userei un linguaggio di scripting per evitare questo compito
    alcuni dei problemi.
  • Al contrario per modificare le operazioni e il recupero degli attributi non è necessario il ;binary tipo di trasferimento per l'operazione di confronto. Ma anche con OpenLDAP non farà male. Non sono sicuro di altre implementazioni del server LDAP.
Correlati:Problemi di sincronizzazione di iPhone/iPod/iPad?
Linux
  1. Traccia del kernel con trace-cmd

  2. Risoluzione dei problemi hardware in Linux

  3. Patchare un binario con Dd?

  4. Problemi con la configurazione della crittografia durante l'aggiornamento?

  5. Problemi con Eclipse e Android Sdk?

Configura OpenLDAP con SSL su CentOS 7 / RHEL 7

Server LDAP

Come cercare LDAP usando ldapsearch (con esempi)

Problemi con il rendering dei caratteri Ttf in Libreoffice?

Problemi di rendering di Chrome/ium con la grafica Intel?

Come installare il server di directory LDAP 389 su Linux con passaggi dettagliati