private String[] getAliases(Principal[] issuers, boolean isServer)
checks the certificates using List.contains() function
The problem description:
List consists of the certs, but contains(cert.getIssuerDN().toString()), so allways returns fals, as far String.equals() checks whether other object is not String (jre1.6 at least)
private String[] getAliases(Principal[] issuers, boolean isServer) {
// System.out.println("***KeyManagerI:getAliases(" + issuers + "," +
// isServer + ")");
String[] aliases = JNIInterface.getInstance().getAliasList("MY");
List validAliases = new ArrayList();
// go through certs from and add only ones contained in issuers
for (int i = 0; i < aliases.length; i++) {
if ((nullAliasList == null) || !nullAliasList.contains(aliases[i]))
try {
X509Certificate cert = JNIInterface.getInstance().getX509Certificate("MY", aliases[i]);
if (!isServer || (-1 != cert.getSubjectDN().getName().indexOf(subjectFilter))) {
boolean check = issuers == null;
if (!check) {
List<String> list = new ArrayList<String>();
for (Principal p : issuers) {
list.add(p.toString());
}
check = list.contains(cert.getIssuerDN().toString());
}
if (check) {
if (JNIInterface.getInstance().isCertValid(cert))
validAliases.add(aliases[i]);
}
}
} catch (CertificateException e) {
e.printStackTrace();
}
}
return (String[]) validAliases.toArray(new String[validAliases.size()]);
}
Logged In: YES
user_id=1581931
Originator: YES
it's the problem description with one of the possible (ugly) solution