Estas pueden formularse como preguntas separadas para mayor claridad, pero todas están relacionadas con el mismo problema.¿Cómo se resuelven los nombres del servidor de certificados SSL? ¿Puedo agregar nombres alternativos con la herramienta de claves?
¿Cómo se resuelven los nombres del servidor de certificados SSL?
¿Por qué los navegadores parecen usar el campo CN del certificado, pero el mecanismo de Java parece solo mirar "nombres alternativos del sujeto" solamente?
¿Es posible agregar nombres alternativos a un certificado SSL usando keytool? Si no, ¿está utilizando openSSL en su lugar una buena opción?
Solo un pequeño trasfondo: Necesito obtener un servidor principal para comunicarse con varios servidores usando HTTPS. Obviamente, no queremos comprar certificados SSL para cada servidor (podría haber muchos), así que quiero usar certificados autofirmados (he estado usando keytool para generarlos). Después de agregar los certificados como confiables en el sistema operativo, los navegadores (IE y Chrome) aceptan felizmente la conexión como de confianza. Sin embargo, incluso después de la adición de los certificados a cacerts de Java, Java sigue sin aceptar la conexión como de confianza y desencadena la siguiente excepción:
Causado por: java.security.cert.CertificateException: Ningún sujeto nombres alternativos presente en sun.security.util.HostnameChecker.matchIP (HostnameChecker.java:142) en sun.security.util.HostnameChecker.match (HostnameChecker.java:75) en com.sun.net.ssl.internal.ssl. X509TrustManagerImpl.checkIdentity (X509T rustManagerImpl.java:264) en com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted ( X509TrustManagerImpl.java:250)en com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (Clien tHandshaker.java:1185) ... 14 más
He descubierto que puedo hacer Java confiar en el certificado implementar mi propio HostNameVerifier, que copié desde aquí: com.sun.jbi.internal.security.https.DefaultHostnameVerifier solo para probar (por cierto, el nombre de host pasado como argumento para el HostnameVerifier es correcto, así que creo que debería haber sido aceptado).
He estado usando el campo de certificado CN como nombre de host (generalmente la dirección IP).
¿Alguien puede decirme si estoy haciendo algo mal y señalarme en la dirección correcta?
El enlace está roto. – axiopisty
Elija su alternativa: http://grepcode.com/search?query=DefaultHostnameVerifier&n= – Renato