ldap userCertificate 屬性的問題
我正在嘗試使用“userCertificate”屬性來保存“der”文件。我可以愉快地使用 ldif 添加我的證書:
dn:cn=bob,ou=users,dc=home
changetype:修改
add:userCertificate;binary
userCertificate;binary:<file:///home/bob/cert.der
當我進行 ldapsearch 時,我看到我的證書採用 base64 編碼,生活似乎很好。但是當我嘗試使用 ldapcompare 時:
ldapcompare -D"cn=admin,dc=home" -W “cn=bob,ou=users,dc=home” “userCertificate;binary:<file:///home/bob/cert.der”
我得到錯誤:
比較結果:無效語法 (21)
附加資訊:無法標準化匹配
UNDEFINED的值
如果我嘗試使用 base64 編碼進行比較,我會得到同樣的錯誤
ldapcompare -D"cn=admin,dc=home" -W “cn=bob,ou=users,dc=home” “userCertificate:: base64encodedStringOfStuff”
有任何想法嗎?
我剛收到這個錯誤:ldap_modify:未定義的屬性類型(17)附加資訊:usercertificate:需要;二進制傳輸。
此錯誤消息非常清楚地引用了RFC 4523 第 2.1 節中的規定。在影響屬性userCertificate的所有 LDAP 操作中,您只需始終附加
;binary
到屬性名稱。ldap_msgfree ldap_err2string 比較結果:無效語法 (21) 附加資訊:無法標準化匹配 UNDEFINED 的值
使用比較操作時,您必須查看哪個EQUALITY匹配規則可用於斷言屬性。
在子模式中userCertificate是
EQUALITY certificateExactMatch
根據頒發者名稱和序列號聲明的(請參閱RFC 4523 第 2.5 節),這意味著該屬性沒有可用的純八位字節字元串匹配。因此,您需要從證書中提取十進制序列號和頒發者 DN(LDAP 字元串表示):
$ openssl x509 -noout -nameopt rfc2253 -serial -issuer -inform der -in ~/certs/michael@stroeder.com.cer serial=0F560E issuer=CN=StartCom Class 1 Primary Intermediate Client CA,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL
將本例中的十六進制序列轉換為十進制,
1005070
並像這樣呼叫ldapcompare:ldapcompare "cn=Michael Ströder+mail=michael@stroeder.com,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
補充筆記:
- 請注意,DN 是複雜的野獸,需要在 shell 命令行上進行特殊處理的特殊字元轉義。因此,我會為此任務使用腳本語言來避免一些麻煩。
- 與修改操作和屬性檢索相反,比較操作不需要
;binary
傳輸類型。但是對於 OpenLDAP,它也不會受到傷害。不確定其他 LDAP 伺服器實現。