Cómo conseguir cadena de certificados del servidor, a continuación, compruebe que es válida y de confianza en Java

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

He establecido la conexión fino:

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

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

Entonces, ¿cómo puedo recuperar la cadena de certificados del servidor? Mi entendimiento es que getServerCertificateChain() debe devolver una matriz de X509Certificate objetos y que esta clase tiene métodos que puede utilizar para interrogar el certificado.

Tengo que comprobar que:

  1. el certificado es válido y de confianza,
  2. de verificación de la Lista de Revocación de Certificados Punto de Distribución contra el número de serie del certificado
  3. asegúrese de que no haya caducado y
  4. compruebe que la dirección URL del certificado coincide con otro (que ya he recuperado ).

Estoy perdido y realmente apreciaría cualquier ayuda!

¿Estás seguro de que Java https del código de cliente no ya que no todos los cuatro cosas para usted?
No le dieron la solución para esto ? Si el Certificado es de confianza o no ? Cualquier Solución para que

OriginalEl autor Marc H | 2011-08-26

3 respuestas

  1. 24

    El método que desea es getServerCertificates, no getServerCertificateChain. Hay una buena muestra de código aquí.


    EDITAR

    Añadido algún código de ejemplo de mi propia. Buen punto de partida para usted. No te olvides de mirar 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");
    }
    }
    }
    }
    }
    Gracias … soy de codificación a las especificaciones de una de las grandes corporaciones manual y me estaba empezando a sospechar que la persona que escribió esta sección se había equivocado. Soy un neófito, aunque cuando se trata de java networking así que he pasado horas tratando de entender lo que el infierno es la diferencia entre getServerCertificateChain y getServerCertificates.
    ¿Cómo puedo interrogar a los certificados, aunque como por los cuatro requisitos que se enumeran más arriba?
    Usted tendrá que convertir los certificados a X509Certificates y el uso de los métodos de la clase.
    ¿Cómo puedo recuperar la dirección url en el certificado? ¿Cómo puedo comprobar si es válida y de confianza y no ha caducado? Yo soy una de las redes neófito y me estoy dando cuenta que la mayoría de los recursos en la red sólo añadir a mi confusión.
    Warning: el código anterior funciona no validar completamente la cadena, sólo comprueba si el certificado está dentro de su período de validez.

    OriginalEl autor Perception

  2. 1

    Este código de ejemplo se menciona por Kirby y arulraj.net se ha quitado de Apache CXF en 2011 y no el apoyo de OCSP. El Apache PDFBox proyecto “resucitado” este código y añadió OCSP apoyo y más características que faltaban en el código original, por ejemplo, la firma de la CRL de verificación. Desde la versión 2.0.13 la mejora de código fuente está disponible en los ejemplos subproyecto, en el CertificateVerifier clase. También es disponible en línea con pequeñas mejoras.

    El código no está reclamando a ser perfecto, y aún no comprobar si la raíz es de confianza. El desarrollo se realiza un seguimiento en JIRA problema PDFBOX-3017.

    OriginalEl autor Tilman Hausherr

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *