LDAP userCertificate 属性の問題

LDAP userCertificate 属性の問題

「userCertificate」属性を使用して「der」ファイルを保存しようとしています。 ldifを使用して証明書を追加できます。

dn: cn=bob,ou=users,dc=home
変更の種類: 変更の追加
: 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"

どんなアイデアがありますか?

ベストアンサー1

次のエラーが発生しました。 ldap_modify:未定義の属性タイプ(17)追加情報:usercertificate:バイナリ転送が必要です。

このエラーメッセージは、以下を非常に明確に示しています。RFC 4523、セクション2.1。常に;binary属性名に追加する必要があります。ユーザー証明書

ldap_msgfree ldap_err2string比較結果:無効な構文(21)追加情報:UNDEFINEDと一致する値を正規化できません。

比較操作を使用するときは、何が何であるかを調べる必要があります。平等一致ルールを使用して属性を主張できます。

サブモードでユーザー証明書次のように宣言されました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進数シーケンスを10進数に変換します。つまり、1005070次を呼び出します。LDAP比較このように:

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サーバーの実装についてはわかりません。

おすすめ記事