「userCertificate」属性を使用して「der」ファイルを保持しようとしています。
ldifを使用して証明書を追加できます:
dn:cn =bob、ou =users、dc =home
changetype:modify
add:userCertificate; binary
userCertificate; binary:
ldapsearchを実行すると、証明書がbase64エンコーディングで表示され、生活は良好に見えます。しかし、ldapcompareを使おうとすると:
ldapcompare -D” cn =admin、dc =home” -W“ cn =bob、ou =users、dc =home”“ userCertificate; binary:
エラーが発生します:
比較結果:無効な構文(21)
追加情報:一致する値を正規化できません
未定義
base64エンコーディングを使用して比較しようとすると同じエラーが発生します
ldapcompare -D” cn =admin、dc =home” -W“ cn =bob、ou =users、dc =home”“ userCertificate ::base64encodedStringOfStuff”
何かアイデアはありますか?
承認された回答:
次のエラーが発生します:ldap_modify:未定義の属性タイプ(17)追加情報:usercertificate:requires;binarytransfer。
このエラーメッセージは、RFC4523のセクション2.1で義務付けられている内容を明確に示しています。常に;binary
を追加する必要があります 属性userCertificateに影響を与えるすべてのLDAP操作の属性名に 。
ldap_msgfree ldap_err2string比較結果:無効な構文(21)追加情報:一致する未定義の値を正規化できません
比較操作を使用するときは、どの EQUALITYを確認する必要があります アサーション属性には一致ルールを使用できます。
サブスキーマuserCertificate EQUALITY certificateExactMatch
で宣言されています 発行者名とシリアル番号(RFC 4523セクション2.5を参照)に基づいています。これは、その属性に使用できる純粋なオクテット文字列の一致がないことを意味します。
したがって、証明書から10進数のシリアル番号と発行者のDN(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
16進数のシリアルを1005070
である10進数に変換します この例では、 ldapcompareを呼び出します。 このように:
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
追記:
- DNは、シェルコマンドラインで特別な処理が必要な
特殊な文字をエスケープする複雑な獣であることに注意してください。
したがって、このタスクではスクリプト言語を使用して回避します
いくつかの問題。 - 操作の変更や属性の取得とは逆に、
;binary
は必要ありません。 比較操作の転送タイプ。しかし、OpenLDAPを使えば、それも害にはなりません。他のLDAPサーバーの実装についてはよくわかりません。