GNU/Linux >> Znalost Linux >  >> Linux

Problémy s atributem uživatelského certifikátu Ldap?

Snažím se použít atribut ‘userCertificate’ k uložení souboru ‘der’.
Svůj certifikát mohu šťastně přidat pomocí ldif:

dn:cn=bob,ou=users,dc=home
typ změny:upravit
přidat:userCertificate;binary
userCertificate;binary:

Vidím svůj certifikát v kódování base64, když dělám ldapsearch a život se zdá být dobrý. Ale když se pokusím použít ldapcompare:

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

Dostávám chybu:

Výsledek porovnání:Neplatná syntaxe (21)
Další informace:nelze normalizovat hodnotu pro shodu
UNDEFINED

Dostanu stejnou chybu, když se pokusím porovnat pomocí kódování base64

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

Nějaké nápady?

Přijatá odpověď:

Právě se mi zobrazuje tato chyba:ldap_modify:Nedefinovaný typ atributu (17) další informace:usercertificate:vyžaduje;binární přenos.

Tato chybová zpráva docela jasně odkazuje na to, co je nařízeno v RFC 4523, oddíl 2.1. Jednoduše vždy musíte připojit ;binary na název atributu ve všech operacích LDAP ovlivňujících atribut userCertificate .

ldap_msgfree ldap_err2string Výsledek porovnání:Neplatná syntaxe (21) Další informace:nelze normalizovat hodnotu pro shodu NEDEFINOVANÉ

Při použití operace porovnání se musíte podívat na kterou ROVNOST pro atribut asertion je k dispozici odpovídající pravidlo.

V podschématu userCertificate je deklarován pomocí EQUALITY certificateExactMatch na základě jména vydavatele a seriálu (viz RFC 4523, část 2.5), což znamená, že pro tento atribut není k dispozici žádná shoda čistého oktetového řetězce.

Takže musíte z certifikátu extrahovat dekadické sériové číslo a DN vydavatele (reprezentace řetězce 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

Převeďte hexadecimální sériové číslo na desítkové, což je 1005070 v tomto příkladu a vyvolejte ldapcompare takhle:

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

Další poznámky:

  • Uvědomte si, že DN jsou komplexní bestie s únikem speciálních
    znaků, které vyžadují speciální ošetření na příkazovém řádku shellu.
    Proto bych pro tento úkol použil skriptovací jazyk, kterému bych se vyhnul
    některé potíže.
  • Na rozdíl od úprav operací a získávání atributů nepotřebujete ;binary typ přenosu pro operaci porovnání. Ale s OpenLDAP to také nebude bolet. Nejste si jisti jinými implementacemi serveru LDAP.
Související:Problémy se synchronizací iPhone / iPod / iPad?
Linux
  1. Odstraňování problémů s hardwarem v Linuxu

  2. Problémy s Eclipse a Android Sdk?

  3. Problémy se zastavením SCP během kopírování souborů přes VPN

  1. Trasování jádra pomocí trace-cmd

  2. Oprava binárního kódu pomocí Dd?

  3. Problémy s Cryptsetup během aktualizace?

  1. Problémy s Ubuntu Via Crouton na Chromebooku?

  2. Problémy s kompilací Imagemagick s Heic?

  3. Služba Linux OS „ldap“