significa que para not found for descargar certpathvalidatorexception certification certificados java x509certificate

para - Cómo obtener la cadena de certificados del servidor y luego verificar que sea válido y confiable en Java



ssl android (3)

El google rápido me trajo a este ejemplo usando BouncyCastle. Creo que mejor responde la pregunta. http://www.nakov.com/blog/2009/12/01/x509-certificate-validation-in-java-build-and-verify-chain-and-verify-clr-with-bouncy-castle/

Necesito crear una conexión Https con un servidor remoto y luego recuperar y verificar el certificado.

He establecido la multa de conexión:

try { url = new URL(this.SERVER_URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); HttpsURLConnection secured = (HttpsURLConnection) con; secured.connect(); }

Pero parece que el método getServerCertificateChain() no está definido por el tipo HttpsURLConnection .

Entonces, ¿cómo recupero la cadena de certificados del servidor? Tengo entendido que getServerCertificateChain() debe devolver una matriz de objetos X509Certificate y que esta clase tiene métodos que puedo usar para interrogar el certificado.

Necesito verificar que:

  1. El certificado es válido y de confianza.
  2. verifique el punto de distribución de la lista de revocación de certificados con el número de serie del certificado
  3. asegúrese de que no haya caducado y
  4. verifique que la URL en el certificado coincida con otra (que ya he recuperado).

Estoy perdido y realmente agradecería cualquier ayuda!


El método que desea es getServerCertificates , no getServerCertificateChain . Hay un buen código de ejemplo here .

EDITAR

Agregué un código de muestra propio. Buen punto de partida para ti. No se olvide de consultar los Javadocs para HttpsURLConnection y X509Certificate .

import java.net.URL; import java.security.cert.Certificate; import java.security.cert.CertificateExpiredException; import java.security.cert.X509Certificate; import javax.net.ssl.HttpsURLConnection; public class TestSecuredConnection { /** * @param args */ public static void main(String[] args) { TestSecuredConnection tester = new TestSecuredConnection(); try { tester.testConnectionTo("https://www.google.com"); } catch (Exception e) { e.printStackTrace(); } } public TestSecuredConnection() { super(); } public void testConnectionTo(String aURL) throws Exception { URL destinationURL = new URL(aURL); HttpsURLConnection conn = (HttpsURLConnection) destinationURL .openConnection(); conn.connect(); Certificate[] certs = conn.getServerCertificates(); for (Certificate cert : certs) { System.out.println("Certificate is: " + cert); if(cert instanceof X509Certificate) { try { ( (X509Certificate) cert).checkValidity(); System.out.println("Certificate is active for current date"); } catch(CertificateExpiredException cee) { System.out.println("Certificate is expired"); } } } } }


Este código de ejemplo mencionado por Kirby y arulraj.net se ha eliminado de Apache CXF en 2011 y no es compatible con OCSP. El proyecto Apache PDFBox "resucitó" este código y agregó soporte OCSP y más funciones que faltaban en el código original, por ejemplo, verificación de firma CRL. Desde la versión 2.0.13, el código fuente mejorado está disponible en el subproyecto de ejemplos, en la clase CertificateVerifier. También está disponible en línea con pequeñas mejoras.

El código no pretende ser perfecto y aún no comprueba si la raíz es confiable. El desarrollo se rastrea en la edición de JIRA PDFBOX-3017 .