私は、LDAPに接続して検索するための情報(例えば、ホスト名、ベースDNなど)がCA証明書(「caCertificate」属性)を含む属性を取得できるメソッドを作成しようとしています。LDAPサーバー(Java)から証明書属性(caCertificate)を読み取る方法は?
私はこれを行う方法についていくつかの提案を見てきましたが、今のところ1つの作業を取得することができていない。
私はLDAP検索と検索を行うことができるよと思いますがされていません
ここでは、動作していると思われる部分のスニペットを示します。
Date theReturnedDate = null;
String base = "ou=CAs,dc=test,dc=com";
String filter = "(objectclass=CertificationAuthority)";
System.out.println("In LDAPUpdate.checkReadLdap: Entering, theLdapCn = [" + theLdapCn + "]...");
Hashtable envRead = new Hashtable(11);
envRead.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
envRead.put(Context.PROVIDER_URL, "ldap://my.test.ldap:389");
envRead.put(Context.SECURITY_AUTHENTICATION, "simple");
envRead.put(Context.SECURITY_PRINCIPAL, "cn=admin,ou=people,dc=test,dc=com");
envRead.put(Context.SECURITY_CREDENTIALS, "xxx");
//specify attributes to be returned in binary format
envRead.put("java.naming.ldap.attributes.binary","caCertificate");
SearchControls searchCtls = new SearchControls();
//Specify the attributes to return
String returnedAtts[]={"caCertificate"};
searchCtls.setReturningAttributes(returnedAtts);
DirContext ctx = null;
try
{
// Create the initial directory context
InitialDirContext initialContext = new InitialDirContext(envRead);
ctx = (DirContext)initialContext;
System.out.println("Context Sucessfully Initialized");
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results = ctx.search(base, filter, constraints);
while(results != null && results.hasMore())
{
SearchResult sr = (SearchResult) results.next();
String dn = sr.getName() + "," + base;
System.out.println("Distinguished Name is " + dn);
Attributes ar = ctx.getAttributes(dn, returnedAtts);
if(ar == null)
{
System.out.println("Entry " + dn);
System.out.println(" has none of the specified attributes\n");
}
else
{
System.out.println("In LDAPUpdate.readCheckLdap: returnedAtts.length=[" + returnedAtts.length + "]");
for(int i=0; i<returnedAtts.length; i++)
{
Attribute attr = ar.get(returnedAtts[i]);
System.out.println(returnedAtts[i] + ":");
for(Enumeration vals=attr.getAll(); vals.hasMoreElements();)
{
System.out.println("\t" + vals.nextElement());
}
}
}
}
}
catch(Exception e)
{
System.err.println(e);
}
私が必要とする、つまりCA証明書を返す属性を取得してX509Certificateオブジェクトに変換する方法を教えてもらえますか?
こんにちは - 「バイト」とは何ですか?私は 'attrs.get( "caCertificate")を実行することでそれを取得できますか?もしそうなら、あなたが提案したものを試してみると、 "コンストラクタのByteArrayInputStream(Attribute)は未定義です"というメッセージが表示されます。 – user555303
'bytes'は' caCertificate'属性の値として得られるバイト配列です。私はそれが明らかだと思ったでしょう。 – EJP