Quando tento recuperar a chave privada de um determinado certificado, como a seguinte código:
ks = KeyStore.getInstance("JKS");
try {
ks.load(keyStore, publicKey.toCharArray());
} catch (IOException ex) {
throw new PasswordInvalidException("Chave pública inválida.");
}
String alias = "meuCertificado";
keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection("minhaSenha"
.toCharArray()));
Tenho a exceção:
java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
at java.security.KeyStoreSpi.engineGetEntry(Unknown Source)
at java.security.KeyStore.getEntry(Unknown Source)
at br.gov.es.sefaz.assinatura.AssinaturaDigital.assinarXML(AssinaturaDigital.java:152)
at br.gov.es.sefaz.assinatura.AssinaturaDigital.main(AssinaturaDigital.java:77)
É isso mesmo. É que um “trusted certificate” é um certificado que deve ter apenas a chave pública cadastrada e deve ser um certificado-raiz (ou um certificado intermediário) na cadeia de certificação.