Obtención de Java para aceptar sólo un certificado SSL

Tengo un applet de Java que se carga algunas extensiones nativas pre-instalado el código para mostrar contenido personalizado en el navegador. Algunos de estos contenidos puede incluir código nativo para ser cargado por la JVM. Obviamente, este es un problema de seguridad. Me gustaría hacer cumplir que todo el contenido viene sólo de los servidores autorizados.

El camino que he seguido para llevar a cabo esto es crear un almacén de claves que contiene sólo un certificado SSL. Yo establecer la ubicación del almacén de claves y la contraseña y se convirtió en la salida de depuración.

 System.setProperty("javax.net.ssl.keyStore", "C:\\keys\\keystore"); System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); System.setProperty("javax.net.debug", "ssl"); 

Yo tenía la impresión de que esto significaría que la JVM que sólo tienen acceso a un almacén de claves del archivo y por lo tanto la clave de una en su interior. De hecho, la depuración de SSL información aparece algo así como 75 claves de la CA, además de la clave que he añadido. Claramente, esto no va a evitar que alguien nos envía no son de confianza código.

¿Hay una manera de decirle al sistema SSL de utilizar solamente un único certificado? ¿Debería utilizar un enfoque completamente diferente?

Actualización: Cambiar el archivo cacerts no es realmente una opción aquí.La JVM debería seguir funcionando normalmente para otras aplicaciones de usarlo. ¿Hay alguna manera, en tiempo de ejecución, a no optar por cargar ese archivo? Estoy buscando en el TrustManager y clases KeyManager pero no entiendo muy bien cómo utilizarlos.


El usuario Thorbjørn Ravn Andersen respondió:

Usted también tiene el almacén de claves globales instaladas con el JRE, que es donde todos los de CA se almacenan. Trate de cambiar el nombre y ver qué pasa.


El usuario Pascal Thivent respondió:

Aún "ver" los certificados de CA de la amplia JRE del sistema cacerts archivo ubicado en java.home/jre/lib/security , que es normal.

Ahora, citando la documentación de keytool acerca de este archivo:

IMPORTANTE: Verifique su cacerts Archivo
Dado que las entidades emisoras de confianza en el cacerts archivo como entidades para la firma y expedición de los certificados a otras entidades, debe administrar la cacerts archivo con cuidado. Lacacerts archivo debe contener sólo los certificados de las entidades emisoras de certificados que la confianza. Es su responsabilidad verificar la raíz de confianza certificados de CA incluido en el cacerts archivo y haga su propia decisiones de confianza. Para eliminar un certificado de la CA no es de confianza de la cacerts archivo, utilice la opción de borrado de la keytool de comandos. Usted puede encontrar el cacerts archivo en el directorio de instalación de JRE. Póngase en contacto con el administrador del sistema si no tienes permiso para editar este archivo.

En su caso, podría ser más fácil de reemplazar por completo la cacerts con su clave propia tienda en lugar de eliminar las 75 entradas si esto es realmente lo que quieres. Si no, entonces usted debe utilizar un enfoque diferente de hecho (¿por qué no acaba de restringir o codificar la lista de servidores autorizados?).


El usuario Gregs respondió:

Tiene que establecer el javax.net.ssl.trustStore propiedad del sistema para señalar a un almacén de claves con tu certificado en la misma. El almacén de claves es que sus credenciales de autenticación, no el otro extremo.


El usuario EJP respondió:

La pregunta está mal aquí. Un certificado es sólo una prueba de identidad. No autorizar certificados, usted autoriza a las identidades. ¿Y si el mismo cliente viene con un nuevo certificado?

La respuesta correcta es instalar un HandshakeCOmpletedListener que comprueba la identidad de pares. El almacén de confianza sólo está allí para la autenticación, es decir, es que la persona que decían que eran. Lo que están haciendo es la autorización, que es una cosa completamente diferente. Usted no debe usar el almacén de confianza (o cualquier otro mecanismo PKI) para la autorización.


Este texto ha sido obtenida de esta fuente original en Stackoverflow.com



Tags: javasslssl-certificatequestions
| Date: 22-09-2012

Comentarios de los lectores: