sitio - ''Localhost'' utilizado como nombre común en el certificado predeterminado de WSo2 crea No se encontró el nombre alternativo del sujeto
probar un certificado ssl (1)
Hemos utilizado wso2 esb (versión 4.0.3) para exponer nuestro servicio web. Nuestro servicio web se agrega como un servicio de proxy utilizando la consola de administración en wso2. Queremos exponer / consumir nuestro servicio web solo a través de https. Después de generar el stub, hemos hecho lo siguiente
- Crea un archivo jks usando java keytool.
- Exportó el certificado wso2 e importó en el archivo jks.
- Se agregó lo siguiente en el código al llamar al servicio web.
System.setProperty ("javax.net.ssl.trustStore", "nombre de archivo"); System.setProperty ("javax.net.ssl.trustStorePassword", "contraseña");
Después de hacer todo esto cuando intentamos llamar al servicio web desde el código java, solo funciona cuando la url se proporciona con el host local. No funciona con la 127.0.0.1 o la dirección IP de la máquina, a pesar de que tenemos la asignación adecuada en el archivo de host. Al usar la dirección IP obtenemos el error como javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
. Este error se debe a que el certificado predeterminado proporcionado por wso2 tiene "localhost" como nombre común. Podemos deshacernos de este problema agregando la siguiente pieza de código
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String string, SSLSession ssls) {
return true;
}});
Pero esto puede crear problemas de seguridad. Por favor sugiérenos cómo resolver este problema.
Este error aumenta cuando el nombre de host no coincide con el CN del certificado. Puedo darte dos soluciones.
- Si solo necesita acceder al servicio con la dirección IP, simplemente genere un certificado que tenga la dirección IP correcta como valor para el valor CN del certificado de los servidores. Java Keytool se puede usar.
- Si desea utilizar tanto la dirección IP como el nombre de host para direccionar el servicio, genere un certificado que contenga Nombres alternativos de sujeto (SAN). El envío de Java Keytool con Java 7 es capaz de generar certificados con SAN. De lo contrario, use cualquier otra herramienta como OpenSSL o use un certificado emitido por una CA con SAN.