Estou tendo uma dificuldade em carregar um certificado determinado pela aplicação quando
no servidor estão instalados 2 ou mais certificados, cada um, em diferentes dispositivos físicos (2 SmartCard e 1 Token).
String configName = certificado.getFileConfig();
String alias = certificado.getAlias();
String senha = Crypto.decryptAES(certificado.getPassword());
if (p == null) {
p = new sun.security.pkcs11.SunPKCS11(configName);
Security.addProvider(p);
}
try {
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
KeyStore ks = KeyStore.getInstance("pkcs11", p);
ks.load(null, senha.toCharArray());
Enumeration<String> aliasEnum = ks.aliases();
while (aliasEnum.hasMoreElements()) {
String aliasKey = (String) aliasEnum.nextElement();
System.out.print(aliasKey + "\n");
}
chavePrivada = (Key) ks.getKey(alias, senha.toCharArray());
cert = (X509Certificate) ks.getCertificate(alias);
if (cert != null) {
System.out.println(getValidade(cert));
} else {
System.out.println("Certificado nulo!!!");
}
System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
System.setProperty("javax.net.ssl.keyStore", "NONE");
System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-SmartCard");
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
A aplicação sempre retorna um certificado, apesar de terem dois ou mais instalados no servidor.
CERTIFICADO 1's AC Certisign Multipla G3 ID
Eu esperava que o método ks.aliases() retornasse todos os certificados:
CERTIFICADO 1's AC Certisign Multipla G3 ID
CERTIFICADO 2's AC Certisign Multipla G3 ID
CERTIFICADO 3's AC Certisign Multipla G3 ID
CERTIFICADO ...'s AC Certisign Multipla G3 ID
Alguém pode me ajudar?