Durante el desarrollo de un cliente de servicio web Java me encontré con un problema. La autenticación para el servicio web está utilizando un certificado de cliente, un nombre de usuario y una contraseña. El certificado de cliente que recibí de la compañía detrás del servicio web está en .cer
formato. Cuando inspecciono el archivo usando un editor de texto, tiene los siguientes contenidos:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Puedo importar este archivo como un certificado en Internet Explorer (¡sin tener que ingresar una contraseña!) Y usarlo para autenticarme con el servicio web.
Pude importar este certificado a un almacén de claves eliminando primero la primera y la última línea, convirtiéndome en líneas nuevas de Unix y ejecutando una decodificación base64. El archivo resultante se puede importar a un almacén de claves (usando el keytool
comando). Cuando enumero las entradas en el almacén de claves, esta entrada es del tipo trustedCertEntry
. Debido a este tipo de entrada (?), No puedo usar este certificado para autenticarme con el servicio web. Estoy empezando a pensar que el certificado proporcionado es un certificado público que se está utilizando para la autenticación ...
Una solución que he encontrado es importar el certificado en IE y exportarlo como un .pfx
archivo. Este archivo puede cargarse como un almacén de claves y puede usarse para autenticarse con el servicio web. Sin embargo, no puedo esperar que mis clientes realicen estos pasos cada vez que reciben un nuevo certificado. Entonces me gustaría cargar el .cer
archivo directamente en Java. ¿Alguna idea?
Información adicional: la compañía detrás del servicio web me dijo que el certificado debería solicitarse (usando IE y el sitio web) desde la PC y el usuario que importaría el certificado más tarde.
fuente
Importar el
.cer
archivo de certificado descargado del navegador (abra la url y busque detalles) en el almacén de claves de cacertsjava_home\jre\lib\security
me funcionó, en lugar de los intentos de generar y usar mi propio almacén de claves.java_home\jre\lib\security
cmd
y CTRL+ SHIFT+ENTERyourAliasName
ypath\to\certificate.cer
respectivamente)De esta manera, no tiene que especificar ninguna opción JVM adicional y el certificado debe ser reconocido por el JRE.
fuente
java_home\jdk_x.xx\jre\lib\security
Para una ruta absoluta, utilice la barra invertida, por ejemplo, las"C:\myCert.crt"
comillas son opcionales si la ruta no contiene espacios en blanco.Aquí está el código que he estado usando para importar programáticamente archivos .cer en un nuevo KeyStore.
fuente
No debería tener que hacer ningún cambio en el certificado. ¿Estás seguro de que estás ejecutando el comando de importación correcto?
Lo siguiente funciona para mí:
donde mycert.cer contiene:
fuente
Una herramienta GUI de código abierto está disponible en keystore-explorer.org
Las siguientes pantallas ayudarán (son del sitio oficial)
Pantalla predeterminada que obtiene al ejecutar el comando:
Y vaya a
Examine
eExamine a URL
opción y luego dar la URL web que desea importar.La ventana de resultados será la siguiente si le das un enlace al sitio de Google.
Este es uno de los casos de uso y el resto depende del usuario (todos los créditos van al keystore-explorer.org )
fuente
El certificado que ya tiene es probablemente el certificado del servidor, o el certificado utilizado para firmar el certificado del servidor. Lo necesitará para que su cliente de servicio web pueda autenticar el servidor.
Pero si además necesita realizar la autenticación del cliente con SSL, entonces necesita obtener su propio certificado, para autenticar su cliente de servicio web. Para esto necesita crear una solicitud de certificado; el proceso implica crear su propia clave privada y la clave pública correspondiente, y adjuntar esa clave pública junto con parte de su información (correo electrónico, nombre, nombre de dominio, etc.) a un archivo llamado solicitud de certificado. Luego, envía esa solicitud de certificado a la compañía que ya la solicitó, y ellos crearán su certificado, firmando su clave pública con su clave privada, y le enviarán un archivo X509 con su certificado, que puede ahora agregue a su almacén de claves y estará listo para conectarse a un servicio web mediante SSL que requiere autenticación del cliente.
Para generar su solicitud de certificado, use "keytool -certreq -alias -file -keypass -keystore". Envíe el archivo resultante a la compañía que lo firmará.
Cuando recupere su certificado, ejecute "keytool -importcert -alias -keypass -keystore".
Es posible que necesite usar -storepass en ambos casos si el almacén de claves está protegido (lo cual es una buena idea).
fuente
Aquí hay un script que utilicé para importar por lotes un montón de archivos crt en el directorio actual en el almacén de claves de Java. Simplemente guarde esto en la misma carpeta que su certificado y ejecútelo así:
import_all_certs.sh
fuente
Así es como esto funcionó para mí:
fuente