Verificación del certificado SSL: javax.net.ssl.SSLHandshakeException

Estoy tratando de llamar a una API HTTPS REST a través deJersey Client. Y en el curso del desarrollo me tropiezo con el siguiente error:

Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
    at com.lftechnology.sbworkbench.utility.utils.PingFederateUtility.main(PingFederateUtility.java:32)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching mvn.signify.abc.com found

Así que busqué en Google un poco y encontré toneladas de solución, lo que realmente funciona.

HTTPS con Jersey Clienthttps://gist.github.com/outbounder/1069465¿Cómo solucionar el error "java.security.cert.CertificateException: no hay nombres alternativos de sujeto presentes"?http://www.mkyong.com/webservices/jax-ws/java-security-cert-certificateexception-no-name-matching-localhost-found/http://java.globinch.com/enterprise-java/security/fix-java-security-certificate-exception-no-matching-localhost-found/

Están en un dominio diferente pero tienen una solución común para resolverlo.

Guión

Actualmente estoy usando un certificado autofirmado autofirmado en el entorno de desarrollo. Y por lo tanto, está obligado a mostrar el problema.

Pregunta

La solución mencionada anteriormente se centra en omitir / permitir que se verifiquen todos los certificados.

Pero cuando lo muevo al entorno de producción, entonces tengo acceso al Certificado firmado válido de una fuente confiable.

Entonces, ¿son útiles estas soluciones cuando me muevo a la producción?¿Está bien omitir la verificación SSL?¿Cuáles son las otras formas alternativas de lograr una solución común para el entorno de desarrollo y producción?

PD

La solución que usé fue,

try
{
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {
        }
        public void checkServerTrusted(X509Certificate[] certs, String authType) {
        }
    }
    };

    // Install the all-trusting trust manager
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    // Install the all-trusting host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (KeyManagementException e) {
    e.printStackTrace();
}

con el que luego cooperoJersey para que funcione Y está funcionando muy bien.

Entonces elQuestion de nuevo.¿Es esta solución viable para ser utilizada en el entorno de producción? Sin embargo, no desea modificar las entidades que regresan, es mucho mejor buscar las entidades en modo de solo lectura. Esto permitirá que Hibernate descarte el estado desconectado asociado que utiliza el mecanismo de verificación sucio para detectar modificaciones del estado de la entidad. Más, las entidades de solo lectura se omiten durante el vaciado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta