2010-05-04 14 views
8

Utilizo SSL para comunicarme entre dos componentes escritos en Java. No puedo usar una CA, así que tengo que autografiar todo. Desafortunadamente, esto significa que cuando intento un apretón de manos, obtengo una SunCertPathBuilderException. Puedo crear mi propio X509TrustManager que solo confía en todo, pero de alguna manera eso frustra el propósito de tener un certificado firmado.Agregar un certificado de confianza mediante programación en Java

Me gustaría, al hacer la conexión por primera vez, solicitar al usuario "SSL handshake with invalid cert. ¿Agregar cert to store?" o algo así para poder agregarlo a su tienda de certificados, como los navegadores web en los sitios con certs no válidos. Puedo encontrar muchos ejemplos en línea de agregar un certificado a la tienda a través de la línea de comandos, pero no puedo encontrar la manera de hacerlo programáticamente. ¿Hay alguna forma de hacer esto?

Respuesta

5

Sí es posible.

Hay algún código here que he usado anteriormente. Tuve que modificarlo para hacer lo que quería y sospecho que tú también lo harás, pero esto debería acercarte, no estás tratando de importar una clave, así que teóricamente deberías poder simplificar las cosas. En cualquier caso, puede hacerse una idea de lo que necesitará.

El JDK JavaDoc para java.security.KeyStore es muy útil también.

0

¿Por qué no creas tu propia CA y firmas tus certificados con eso? Entonces, todo lo que tendría que hacer es instalar el certificado propio de CA en las máquinas y validar todos los certificados firmados por esa CA.

+0

Porque cada usuario ejecutará su propio servidor y necesita su propio certificado para la autenticación (por lo que uno se puede distinguir de otro). Supongo que podría crear una CA, pero eso complicaría en gran medida el procedimiento de instalación, lo que requeriría que el usuario me hiciera solicitudes de producción de certificados. – directedition

0

Por qué necesitaría hacer esto, no está validando que el cliente es quien dice que es, solo está usando los certs para encriptar las comunicaciones, por lo que un administrador de confianza personalizado que permita todos los certificados es todo lo que necesita. Lo que está preguntando es posible y desde la memoria también se necesita un administrador de confianza personalizado para validar los certificados y almacenarlos en el almacén de claves. No recuerdo los detalles, pero al menos sabes que es posible hacerlo.

Cuestiones relacionadas