Estoy tratando de conectarme a un servidor SSL que requiere que me autentique. Para usar SSL sobre Apache MINA, necesito un archivo JKS adecuado. Sin embargo, solo me han dado un archivo .PEM.
¿Cómo haría para crear un archivo JKS a partir de un archivo PEM?
Respuestas:
Primero, convierta su certificado en un formato DER:
Y después, impórtelo en el almacén de claves:
fuente
Si solo desea importar un certificado en formato PEM en un almacén de claves, keytool hará el trabajo:
fuente
Desarrollé http://code.google.com/p/java-keyutil/ que importa certificados PEM directamente en un almacén de claves Java. Su propósito principal es importar paquetes de certificados del sistema operativo PEM de varias partes, como ca-bundle.crt. Estos a menudo incluyen encabezados que keytool no puede manejar
fuente
keytool
ya hace todo esto por ti (y más). (Por cierto, debe cerrar suFileOutputStream
, y cerrar sus transmisiones de E / S enfinally
caso de que ocurra una excepción.)En mi caso, tenía un archivo pem que contenía dos certificados y una clave privada encriptada para ser utilizada en la autenticación SSL mutua. Entonces mi archivo pem se veía así:
Aquí esta lo que hice
Divida el archivo en tres archivos separados, para que cada uno contenga solo una entrada, comenzando
---BEGIN..
y terminando con---END..
líneas. Asumamos ahora tenemos tres archivos:cert1.pem
,cert2.pem
, ypkey.pem
.Convierta
pkey.pem
al formato DER usando openssl y la siguiente sintaxis:Tenga en cuenta que si la clave privada está encriptada, debe proporcionar una contraseña (obtenerla del proveedor del archivo pem original) para convertirla al formato DER,
openssl
le pedirá una contraseña como esta: "ingrese una frase de contraseña parapkey.pem
:".Si la conversión es exitosa, obtendrá un nuevo archivo llamado
pkey.der
.Cree un nuevo almacén de claves de Java e importe la clave privada y los certificados:
(opcional) Verifique el contenido de su nuevo almacén de claves:
Tipo de almacén de claves: JKS Proveedor de almacén de claves: SUN
Su almacén de claves contiene 3 entradas:
cn = ..., ou = ..., o = .., 2 de septiembre de 2014, TrustedCertEntry, huella digital del certificado (SHA1): 2C: B8: ...
importkey, 2 de septiembre de 2014, PrivateKeyEntry, Certificado de huella digital (SHA1): 9C: B0: ...
cn = ..., o = ...., 2 de septiembre de 2014, TrustedCertEntry, huella digital de certificado (SHA1): 83:63: ...
(opcional) Pruebe sus certificados y clave privada de su nuevo almacén de claves en su servidor SSL: (Puede habilitar la depuración como una opción de VM: -Djavax.net.debug = all)
Finalmente, registre sus certificados con HttpsURLConnection si planea usarlo:
fuente
session.getPeerHost()
no devuelve el nombre en el certificado, sino el nombre con el que se conectó (es decir,urlHostName
aquí), por lo que eso siempre será cierto. Siempre regresas detrue
todos modos.Si necesita una manera fácil de cargar archivos PEM en Java sin tener que lidiar con herramientas externas (opensll, keytool) , aquí está mi código que uso en producción:
Que te diviertas.
fuente
Siempre estoy olvidando cómo hacer esto porque es algo que solo hago de vez en cuando, esta es una posible solución, y simplemente funciona:
Ejecute las dos líneas de código siguientes:
Si se ejecuta en un entorno Java SE, agregue las siguientes opciones:
O agregue lo siguiente al código de Java:
La otra opción para el paso 2 es simplemente usar el
keytool
comando. A continuación se muestra un ejemplo con una cadena de certificados:fuente
Utilicé Keystore Explorer
fuente
También hay una herramienta GUI que permite la creación visual de JKS y la importación de certificados.
http://portecle.sourceforge.net/
fuente
Lo obtuve de internet. Funciona bastante bien para archivos pem que contienen múltiples entradas.
fuente