LDAP の userCertificate 属性に対して検索フィルターでバイナリ値を使用する方法に精通している人がいるかどうかを調べようとしています。私は古い JNDI API でこれを行う方法を知っていますが、誰かが Netscape Directory SDK (netscape.ldap) でそれを理解するのを手伝ってくれるかどうか知りたいです。
JNDI API の例:
byte[] userCert = Base64.decodeBase64(base64Certificate);
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapURL);
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
InitialDirContext context = new InitialDirContext(env);
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(fetchArray);
Enumeration<SearchResult> results = context.search(baseDN, "userCertificate={0}", new Object[] {userCert}, controls);
私がやりたいのは、次の API を使用することですが、上記のコードでは結果が得られません。
byte[] userCert = Base64.decodeBase64(base64Certificate);
LDAPConnection ld = new LDAPConnection();
ld.connect(ldapURL, ldapPort);
ld.authenticate(username, password);
LDAPSearchResults results = ld.search(baseDN, LDAPConnection.SCOPE_SUB, "(userCertificate;binary=" + base64Certificate + ")",
fetchArray, false);
;binary 修飾子の有無にかかわらず試し、バイナリ値と base64 値の両方を試しました。ただし、バイト配列を「\ xx」文字列形式に変換するカスタムメソッドを作成するとうまくいきます。それは少しハックに思えますが、おそらく遅いので、このようなバイナリ検索を行う API ネイティブの方法があるかどうか疑問に思っています。
ありがとう。