2010-10-05 20 views
12

Al comprar un certificado de firma de código, ¿cuáles son los méritos de comenzar con un certificado PKCS12 frente a JKS? Algunos vendors dan instrucciones para comenzar con una solicitud de firma de certificado JKS o PKCS12. Nos gustaría tener la máxima flexibilidad en el uso de un certificado comprado, especialmente teniendo en cuenta el costo. Por ejemplo, podemos estar firmando algo más que código Java (por ejemplo, firma de código de iPhone o Android). ¿Qué consideraciones técnicas debemos tener en cuenta al elegir cualquiera de los enfoques?¿Cuáles son los méritos de JKS vs PKCS12 para la firma de código?

Respuesta

25

Si está trabajando en Java, Java Key Store es un lugar bastante natural para almacenar claves privadas. Las aplicaciones Java normalmente esperan obtener las claves que necesitan de JKS, y es fácil acceder desde sus propias aplicaciones Java. JKS no es accesible (sin saltos de algunos aros) desde fuera de Java.

Los archivos PKCS # 12 (alias PFX), por otro lado, son una forma neutral de almacenar certificados y claves privadas encriptadas, y han existido lo suficiente como para que sean compatibles en casi todos lados. Sin embargo, tenga en cuenta que el formato de archivo es terriblemente complejo y excesivamente general: eche un vistazo a "PFX - Cómo no diseñar un protocolo/estándar criptográfico" de Peter Gutmann (http://www.cs.auckland.ac.nz/~pgut001/pubs/pfx.html) para tener una visión alegre de los problemas .

Tenga en cuenta que el uso de uno u otro de estos formatos de almacenamiento es realmente un problema acerca de cómo su aplicación almacenará localmente claves privadas cifradas. El proveedor que le vende su certificado nunca verá la clave privada, por lo que no le importa qué formato use. Usted le envía a él (el proveedor/CA) una solicitud de certificado PKCS n. ° 10 (que contiene la clave pública y la firma usando la clave privada, pero NO contiene la clave privada) y le devuelve un certificado (que puede almacenar en JKS o en el archivo PKCS # 12 o ambos, o en cualquier otro lugar que te apetezca).

Técnicamente, ninguno de los dos formatos es ideal, ya que ambos protegen la clave privada cifrándola con una clave derivada de una contraseña; sin embargo, esto no hace que ninguno sea mejor que el otro. La seguridad (aunque no la conveniencia) es mejor si puede usar una tarjeta inteligente u otra solución de almacenamiento de clave de hardware.

El factor principal que determina su elección debe ser cómo planea usar la clave privada, es decir: qué aplicaciones necesitarán usar la clave privada y qué formato (s) de almacenamiento de claves ya manejan. PKCS # 12 es la opción más flexible ... pero si tiene la intención de usar la clave solo con el código que usted mismo escribe (no se requiere interoperabilidad), entonces también podría considerar el uso de contenedores PKCS # 8 o PKCS # 15.

No puedo recomendar escribir su propio código para manejar PKCS # 12 (lo he hecho, no es divertido) - use una biblioteca probada de terceros (como OpenSSL).

+0

Bien, entonces el elemento crítico que señala es que PKCS # 12 es probado y verdadero. Eso funciona, gracias. –

2

En caso de que tenga almacén de claves JKS puede convertir a PKCS12 mediante el siguiente comandos

 
keytool -importkeystore -srckeypass secret -destkeypass meow123 -srcstorepass secretstore -deststorepass secretstore -srcalias certforsigning -destalias certforsigning -srcalias certforencryption -destalias certforencryption -srckeystore my_java_keystore.jks -destkeystore PFX_keystore.pfx -deststoretype PKCS12 

donde my_java_keystore.jks es el almacén de claves de Java que tiene dos teclas con alias certforsigning y certforencryption

y también puede convertir las claves de PKCS12 a JKS utilizando Keytool

Cuestiones relacionadas