tls sslscan check java ssl ssl-certificate authentication

java - sslscan - SSLHandshakeException: no hay suites de cifrado en común



check ssl-certificate (2)

Seguí las instrucciones aquí y recreé certificados que previamente creé incorrectamente. Algo ha cambiado ya que ahora estoy viendo javax.net.ssl.SSLHandshakeException: no cipher suites in common en el servidor y javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure en el cliente. En lugar de los errores, esta pregunta

El servidor es ClassFileServer.java y el cliente respectivo SSLSocketClientWithClientAuth.java

Cualquier consejo sobre cómo hacer que los dos extremos funcionen bien, tenga en cuenta que estoy usando localhost así que supongo que las capacidades de cifrado son las mismas.

Actualizar:

Estos son los pasos que he usado para generar los archivos, puedo confundir la clave y el almacén de confianza .:

En el servidor (siguiendo esta guía):

$ keytool -genkey -alias serverkey -keyalg RSA -keypass p@ssw0rd -storepass p@ssw0rd -keystore keystore.jks

$ keytool -export -alias serverkey -storepass p@ssw0rd -file server.cer -keystore keystore.jks

$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass p@ssw0rd -storepass p@ssw0rd

En el lado del cliente (por esta guía):

$ keytool -genkey -alias clientkey -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks

$ keytool -export -alias clientkey -storepass changeit -file client.cer -keystore keystore.jks

$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit

Tuve que usar otro medio ya que la depuración excedía el límite del cuerpo de este sitio:

Error de depuración del cliente: http://pastebin.com/mHCmEqAk

Error de depuración del servidor: http://pastebin.com/YZbh7H8f


Obtuve este error al configurar SSL en un clúster de Cassandra. El problema resultó estar en la documentación de la versión 2.0 al describir la generación de las claves:

keytool -genkey -alias -keystore .keystore

Omite la especificación de RSA como el algoritmo, debe ser ( ver v1.2 documentos ):

keytool -genkey -alias -keyalg RSA -keystore .keystore


javax.net.ssl.SSLHandshakeException: no cipher suites in common

Esto tiene dos causas:

  1. El servidor no tiene una clave privada y un certificado, y posiblemente no tenga un keystore. En tal caso, solo puede usar los conjuntos de cifrado anónimos inseguros, que están deshabilitados de manera predeterminada, y deben permanecer de esa manera. Por lo tanto, no existe un paquete de cifrado que pueda aceptar usar con el cliente.

  2. Excesivas restricciones en las suites de cifrado impuestas por el cliente o el servidor o ambas, de modo que no puede haber acuerdo.

En sus almacenes de claves y almacenes de confianza, todo se ve bien, excepto que está realizando cuatro pasos de importación donde solo necesita dos. No necesita importar el certificado del servidor en el almacén de confianza propio del servidor o el certificado del cliente en el almacén de confianza del cliente. Solo necesitas esto:

Servidor:

$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass p@ssw0rd -storepass p@ssw0rd

Cliente:

$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit

y solo lo necesita porque está usando un certificado autofirmado. Solución simple: no. Use un certificado firmado por CA, que sea confiable para el almacén de confianza predeterminado que se envía con Java.