6

Estoy trabajando con certificados X509 en Java. Dado un certificado ¿es posible encontrar todos los demás certificados en la jerarquía de firmas hasta que llegue al certificado raíz?Obtención de la cadena de certificados

Tengo un archivo de certificado (con una extensión .cer) y deseo extraer el certificado de firma principal. Deseo seguir buscando el padre de ese certificado hasta que obtenga el certificado raíz final, que está autofirmado.

He comprobado las API de certificados X509Certificate y las API relevantes en java.security.cert pero no he podido encontrar nada útil.

+1

posible duplicado de [¿Cómo generar certificado intermedio y de raíz de un certificado de hoja existente?] (Http://stackoverflow.com/questions/11076491/how-to-generate-intermediate-and-root-cert-from- an-existing-leaf-certificate) –

+1

No hay una manera confiable de hacerlo. Ver mi respuesta en http://stackoverflow.com/a/11076955/47961 –

+1

¿Has probado [java.security.KeyStore # getCertificateChain()] (http://docs.oracle.com/javase/6/docs/api /java/security/KeyStore.html#getCertificateChain(java.lang.String))? – Zaki

Respuesta

2

Eso no es difícil, suponiendo que de alguna manera/fuera de banda obtuvieron todos los certificados intermedios y el certificado raíz en uno o más llaveros.

Tenga una mirada en

http://codeautomate.org/blog/2012/02/certificate-validation-using-java/ 

un código cortado con tijeras, que hace precisamente eso. El bit de clave está en validateKeyChain() y consiste básicamente en

cert = cert-to-validate 
    while(not self signed) { 
     extract issuer from cert 
     scan keychain(s) to find cert with a subject equal to the issuer 
     if none found - error 
     check if the signature is correct. 
     cert = issuers_cert 
    } 
    if not at the top/root - error 

En cuanto a la forma en a obtener los certificados/raíz intermedios - que es una cuestión diferente. Tenga en cuenta que este código es un poco ingenuo, y no comprende completamente la firma cruzada. Sin embargo, java pkix llama: BouncyCastle tiene un ejemplo.

En general, puede crear los certificados de raíz en un llavero; pero los certificados intermedios a menudo necesitan ser 'reunidos' o descubiertos más dinámicamente. Esto generalmente requiere consultar la pila SSL durante TLS o similar.

Cuestiones relacionadas