Normalmente las trazas que ofrece java en relación a problemas SSL no son muy clarificatorias, sobre todo en lo que respecta al handshake SSL, es difícil averiguar si es un fallo en los algoritmos de cifrado, versión de protocolo u otro problema. Cuando es un fallo de certificado sí que se ve más claro, ejemplo:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target{code}
Y un ejemplo de error de negociación (handshake):
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
Para obtener más información de la negociación de algoritmos de cifrado y protocolos durante la sesión SSL, podemos pasar a la ejecución del programa java como argumento lo siguiente:
-Djavax.net.debug=ssl,handshake
La ejecución nos mostrará con nivel de debug todo el proceso de handshake SSL. Si no fuera suficiente, se puede aumentar aún más el nivel de debug:
-Djavax.net.debug=ssl:handshake:verbose:keymanager:trustmanager -Djava.security.debug=access:stack