2010-02-10 29 views
6

Estoy creando un programa cliente Java que enviará información sensible a un servidor Tomcat. Entonces necesito usar la Conexión SSL para que la información sea encriptada.Conexión SSL desde el cliente Java

Necesito usar el certificado autofirmado no confiable pero tengo problemas para hacer la conexión desde el cliente java.

He configurado con éxito Tomcat 5.5 para usar SSL y probado a través de Firefox, que muestra una advertencia de certificado autofirmado.

que siguió la configuración SSL Tomcat 5.5 y mencionado para crear un almacén de claves:

keytool -genkey -alias tomcat -keyalg RSA

Entonces hice una exportación de las anteriores:

keytool -export -keystore .keystore -alias tomcat -file localhost.cer

Entonces hice una importación del certificado anterior en la máquina cliente:

keytool -import -alias tomcat -file localhost.cer -keystore "C:\Program Files"\Java\jdk1.6.0_17\jre\lib\security\cacerts"

Pero cuando se ejecuta el cliente me sale:

Excepción en el hilo "principal" javax.net. ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el destino solicitado

Este es el código de cliente:

URL url = new URL("https://localhost:8443"); 
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
conn.setSSLSocketFactory(sslsocketfactory); 
InputStream inputstream = conn.getInputStream(); 

Ahora acabo de empezar a jugar con estos certificados hoy y soy nuevo en almacenes de claves, así que por favor sea paciente.

¿Puede alguien explicar cómo exportar e importar el certificado creado en Tomcat a la máquina del cliente?

Gracias.

+1

Quizás importó el certificado incorrecto, o tal vez lo importó en el JRE incorrecto.Mucha gente tiene múltiples JRE en sus máquinas. Debería enumerar los contenidos de los cacerts y ver si su certificado está ahí. Además, puede configurar la propiedad del sistema java.net.debug = all para ver qué más detalles sobre el envío de certificados y la comprobación de partes. –

Respuesta

1

Atlassian tiene buenas instrucciones sobre cómo solucionar esto.

http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services

Otro enfoque es la instalación de validadores de certificados menos implacables, pero que se debe hacer solamente como último recurso.

+0

El problema es que parece que ha hecho esos pasos. –

+0

Si desactivo por completo la validación de la certificación SSL, ¿los datos enviados al servidor seguirán encriptados? Encontré un ejemplo que no valida los certificados SSL, pero quiero asegurarme de que la transmisión de datos aún esté encriptada. – Marquinio

+1

Si deshabilita la validación SSL, el túnel SSL seguirá existiendo y los datos seguirán encriptados. ** PERO ** ¡ya no sabrás dónde termina ese túnel! Un atacante podría hacer algo como esto para romper su seguridad: envenenar su DNS con una dirección IP arbitraria, generar un certificado SSL autofirmado para el FQDN al que se está conectando, escuchar SSL en una dirección IP venenosa y responder con un falso certificado SSL. Sin validación, su cliente SSL confiará en el certificado SSL del servidor, independientemente de la CA de la que provenga. –

0

Utilice Apache HTTP Cleint jar y siga este SSL Guide.

EasySSLProtocolSocketFactory se puede utilizar para crear conexiones SSL que permiten que el servidor de destino se autentique con un certificado autofirmado.

+1

¿Puede la persona que marcó negativo explicar por qué? He usado esta solución y funciona muy bien. –

0

Creo que debe ingresar la contraseña usando "changeit".

Cuestiones relacionadas