2011-04-18 33 views
34

Estoy seriamente confundido sobre las diferencias entre los archivos cacerts y jssecacerts.¿Por qué java tiene los archivos cacerts y jssecacerts?

Sé que, de forma predeterminada, java busca el archivo jssecacerts y luego el archivo cacerts.

¿Pero cuál es el punto del archivo jssecacerts?

Según tengo entendido, si se necesita utilizar un nuevo almacén de confianza, se debe realizar una copia de cacerts y todas las nuevas CA de confianza deben agregarse a esa copia. La copia de cacerts (con las nuevas CA) debe ser referenciada por la propiedad del sistema -Djavax.net.ssl.trustStore. De esta forma, otras aplicaciones Java que se ejecutan en esa máquina no confiarán accidentalmente en CA no predeterminadas.

+0

¿realmente no encuentras ninguna de las 3 respuestas para ser la correcta? ¿Podría seleccionar el que considere correcto, por favor? – JoeG

Respuesta

4

Buena pregunta. Creo que surge del hecho histórico de que JSSE alguna vez fue un complemento. JSSE permite múltiples proveedores, por lo que tal vez jssecacerts es solo para el proveedor de JSSE, y otros proveedores pueden usar el suyo propio.

Pero quién usó cacerts antes de JSSE es otra pregunta.

9

Según tengo entendido, el archivo cacerts es el predeterminado.

Si hay un archivo jssecacerts, se utiliza exclusivamente, no además del archivo cacerts.

Mi recomendación: guarde el archivo cacerts, cópielo en jssecacerts y agregue certificaciones CA/firma privadas necesarias para el archivo jssecacerts.

+0

Gracias por esto, también encontré que tener una CA en cacerts no funciona si existe un archivo jssecacerts y, en su lugar, debe agregarse a jssecacerts. –

+0

@EJP No está "destruyendo" el archivo jssecacerts enviado. No hay un archivo jssecacerts enviado. Al copiar cacerts en jssecacerts, Java ahora usará jssecacerts. Ahora puede agregar/certs remotos de jssecacerts usando 'keytool' sin preocuparse por cambiar los valores predeterminados (cacerts) que se incluyen con Java. Deshacer cualquier cambio es tan fácil como eliminar jssecacerts del directorio. – DeezCashews

22

De Java™ Secure Socket Extension (JSSE) Reference Guide, TrustManagerFactory utiliza los siguientes pasos para tratar de encontrar material de confianza:

  1. propiedad del sistema javax.net.ssl.trustStore
  2. java-home/lib/security/jssecacerts
  3. java-home/lib/security/cacerts (enviado por defecto)

Creo que este se basa en la convención sobre el concepto de configuración. Sin esfuerzo de codificación adicional, se usará cacert. Para certificaciones CA/Firma extra privadas, un desarrollador puede usar la primera o la segunda forma, donde el primero puede contener un certificado en particular pero luego contiene una lista de certs.

+4

El punto es que una vez que encuentra 1, 2 o 3 usa eso exclusivamente, por lo que jssecacerts necesitaría incluir TODOS los certificados si se usan. – JoeG

Cuestiones relacionadas