2011-12-16 20 views
8

Quiero hacer una conexión de socket SSL del servidor usando el siguiente código:Cómo corregir SSL - Ningún certificado disponible

int port = 12000; 
ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault(); 
ServerSocket ssocket = ssocketFactory.createServerSocket(port); 

// Listen for connections 
Socket socket = ssocket.accept(); 

consigo un "javax.net.ssl.SSLException: No disponible certificado o clave corresponde a las suites de cifrado SSL que están habilitadas. "al hacer la aceptación.

he creado un almacén de claves que contiene una clave RSA usando:

keytool -genkeypair -alias ClubConnectionCert -keyalg RSA -validity 7 -keystore ClubConnectionKeystore 

y comienzo mi programa con las siguientes opciones:

-Djavax.net.ssl.keyStore=ClubConnectionKeystore -Djavax.net.ssl.keyStorePassword=mypassword 

hacer yo echo de menos algo de código para leer en el almacén de claves, o ¿cómo puedo probar/depurar que realmente se usa el almacén de claves dado?

Respuesta

7

He ejecutado su código y confirmo que está funcionando bien.

Asegúrese javax.net.ssl.keyStore puntos exactamente a su archivo de almacén de claves. Pongo mi archivo de almacén de claves en la raíz de mi proyecto. Quizás intente la ruta absoluta a su almacén de claves.

Asegúrese de que los parámetros -D estén configurados como parámetros JVM, no como opciones de programa (en su IDE).

Buena suerte, estás a punto de hacerlo funcionar.

+0

Además, asegúrese de que ssl realmente funciona sin Java. – jayunit100

+0

@ jayunit100: ¿qué quieres decir? – Bruno

+1

Si apunta a una ruta de acceso inexistente, obtienes 'FileNotFoundException'. "Asegúrese de que los parámetros -D estén configurados como parámetros JVM" es la explicación más probable: no hay un almacén de claves predeterminado en JSSE (por lo que no especificar la propiedad del sistema conduce a este error). – Bruno

Cuestiones relacionadas