una - porque aparece aplicacion bloqueada por la seguridad de java
¿Cómo puedo obtener una lista de certificados raíz de confianza en Java? (2)
Me gustaría poder acceder a todos los certificados raíz de confianza mediante programación en una aplicación Java.
Estaba mirando la interfaz del almacén de claves, pero espero obtener la lista de raíces de confianza que está implícita con el JRE.
¿Es accesible en cualquier lugar?
Esto debería ser más flexible utilizando el almacén de confianza predeterminado en el sistema para obtener todos los certificados:
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
List<Certificate> x509Certificates = new ArrayList<>();
trustManagerFactory.init((KeyStore)null);
Arrays.asList(trustManagerFactory.getTrustManagers()).stream().forEach(t -> {
x509Certificates.addAll(Arrays.asList(((X509TrustManager)t).getAcceptedIssuers()));
});
`` `
Hay un ejemplo que muestra cómo obtener un conjunto de certificados raíz e iterar a través de ellos. Enumerar las autoridades de certificación (CA) de mayor confianza en un almacén de claves . Aquí hay una versión ligeramente modificada que imprime cada certificado (probado en Windows Vista).
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.PKIXParameters;
import java.security.cert.TrustAnchor;
import java.security.cert.X509Certificate;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
try {
// Load the JDK''s cacerts keystore file
String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace(''/'', File.separatorChar);
FileInputStream is = new FileInputStream(filename);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "changeit";
keystore.load(is, password.toCharArray());
// This class retrieves the most-trusted CAs from the keystore
PKIXParameters params = new PKIXParameters(keystore);
// Get the set of trust anchors, which contain the most-trusted CA certificates
Iterator it = params.getTrustAnchors().iterator();
while( it.hasNext() ) {
TrustAnchor ta = (TrustAnchor)it.next();
// Get certificate
X509Certificate cert = ta.getTrustedCert();
System.out.println(cert);
}
} catch (CertificateException e) {
} catch (KeyStoreException e) {
} catch (NoSuchAlgorithmException e) {
} catch (InvalidAlgorithmParameterException e) {
} catch (IOException e) {
}
}
}