certificate - utiliza - ¿Cuáles son los méritos de JKS vs PKCS12 para la firma de código?
keytool p12 (2)
Al comprar un certificado de firma de código, ¿cuáles son los méritos de comenzar con un certificado PKCS12 en lugar de JKS? Algunos vendors dan instrucciones sobre cómo 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 más que solo 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?
En caso de que tenga un almacén de claves JKS, puede convertir a PKCS12 usando los siguientes 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 java que tiene dos claves con alias certforsigning y certforencryption
y también puede convertir las claves de PKCS12 a JKS usando Keytool
Si está trabajando en Java, entonces el Java Key Store es un lugar bastante natural para almacenar claves privadas. Las aplicaciones Java generalmente esperan obtener las claves que necesitan de JKS, y es fácil acceder a ellas desde sus propias aplicaciones Java. Sin embargo, no se puede acceder a JKS (sin saltar algunos aros) desde fuera de Java.
Los archivos PKCS # 12 (también conocidos como PFX), por otra parte, son una manera neutral de almacenar claves y certificados privados cifrados, y han existido durante el tiempo suficiente para que sean compatibles en casi todas partes. Tenga en cuenta, sin embargo, que el formato del archivo es horriblemente demasiado complejo y general, eche un vistazo a "PFX - Cómo no diseñar un protocolo / estándar de cifrado" de Peter Gutmann ( http://www.cs.auckland.ac.nz/~pgut001/pubs/pfx.html ) para una vista alegre de los problemas.
Tenga en cuenta que el uso de uno u otro de estos formatos de almacenamiento es realmente un problema sobre cómo su aplicación almacenará las claves privadas cifradas localmente. El proveedor que le vende su certificado nunca verá la clave privada, por lo que no le importa qué formato utilice. Le envía (al proveedor / CA) una solicitud de certificado PKCS # 10 (que contiene la clave pública y firmó con la clave privada, pero que NO contiene la clave privada) y le envía un certificado (que puede almacenar en JKS o en el archivo PKCS # 12 o ambos, o en cualquier otro lugar que le guste).
Técnicamente, ninguno de los dos formatos es ideal, ya que ambos protegen la clave privada al cifrarla 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 claves 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) del almacén de claves ya manejan. PKCS # 12 es la opción más flexible ... pero si pretende usar la clave solo con el código que usted mismo escribe (no se requiere interoperabilidad), entonces también podría considerar usar los contenedores PKCS # 8 o PKCS # 15.
No puedo recomendar que escriba su propio código para manejar PKCS # 12 (lo he hecho, no es divertido); use una biblioteca de terceros comprobada (como OpenSSL).