convertir clave .p7b a .pfx

10

Tengo un certificado SSL en formato .p7b que necesito convertir a .pfx. Si intento esto a través de la administración del certificado de Windows, la opción de experto como .pfx está desactivada.

Intentando con openssl, he encontrado los siguientes dos comandos para hacer la conversión:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

pero no estoy seguro de qué tecla usar para el segundo comando o a qué certificado se refiere CACert.cer.

¿Cómo puedo convertir esta clave al formato .pfx?

DrStalker
fuente

Respuestas:

20

PKCS # 7 no incluye la parte privada (clave) de un par de certificado / clave privada, se usa comúnmente para la difusión de certificados (por ejemplo, como respuesta a una solicitud de certificado PKCS # 10, como un medio para distribuir certificados S / MIME Se utiliza para cifrar mensajes o para validar mensajes firmados, etc. Es importante recordar que es solo para certificados que son, por definición, elementos públicos.

PKCS # 12 es un contenedor más universal: está destinado a almacenar la clave privada y las partes del certificado público juntas para que puedan moverse. Tiene la capacidad de estar protegido con contraseña para proporcionar cierta protección a las teclas.

PFX fue el predecesor de PKCS # 12.

No puede (como señala Anitak) convertir de PKCS # 7 a PKCS # 12 sin datos adicionales (la parte de la clave privada) porque PKCS # 7 no tiene todos los datos.

Mark Sutton ha señalado por qué no puede exportar como PFX: el certificado en cuestión tiene su clave privada marcada como no exportable. El proveedor de servicios criptográficos (CSP) no permitirá que se mueva esa clave, esto es intencional. La única * forma en que puede obtener un par exportable cert \ key es si el Certificado original se emitió con el conjunto de banderas exportables. También es posible que no haya una clave privada asociada con el certificado, pero supongo que ese no es el caso aquí.

Hay un buen resumen de los diversos tipos de PKCS en Wikipedia .

  • La única forma legítima al menos. Dependiendo del CSP \ Crypto Hardware, puede haber mecanismos, especialmente para el software solo CSP, pero esa es un área para la investigación de vulnerabilidades de seguridad solo en lo que a mí respecta, no el administrador de sistemas.
Helvick
fuente
Gracias: parece que comprar un nuevo certificado puede ser más barato que recuperarlo, según la cantidad de tiempo que tendremos que tratar con un tercero para hacer esto.
DrStalker
12

Paso por esto cada 2 años (cuando renuevo un certificado de firma de código) y es una molestia cada vez.

Una pieza clave de información es que simplemente puede cambiar el nombre de los archivos .p7b a .spc (como se indica aquí: http://support.microsoft.com/kb/269395 ).

Luego puede usar la herramienta pvk2pfx.exe para convertir su PVK + SPC en un PFX.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(puede omitir el paso de cambio de nombre de p7b y usarlo directamente; no lo he intentado ...)

John Hart
fuente
Esto es mucho más útil que la respuesta aceptada. Estoy sorprendido por el estado del código sin sentido. Me estremezco ante la idea de tener que repetir esto una y otra vez cuando caducan los certificados.
Tim
3

Con la herramienta de Windows, si la opción pfx está desactivada, significa que la clave privada no se puede exportar desde la tienda local. Esto se debe a que no está allí (porque las claves no se generaron en el cuadro que está usando) o porque cuando generó las claves la clave privada no se marcó como exportable y la plantilla de certificado de Windows no se configuró para permitir la exportación.

Supongo que está utilizando una autoridad de certificación de Microsoft para emitir sus certificados. ¿Es esto correcto?

Si es así, entonces: -

1.Asegúrese de que la plantilla de certificado permita la exportación de claves privadas.
2.Cómo está generando su solicitud de certificado, puede usar la siguiente técnica

CREAR archivo INF de la siguiente manera

[Versión]
Firma = "$ Windows NT $

[NewRequest]
Asunto =" etc "
KeySpec = 1
Exportable = 1
MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

NOTE the Exportable = 1
Luego use los comandos que aparecen en el símbolo del sistema

certreq -new infile.inf reqfile.req // donde infile.inf es el archivo de arriba y reqfile es el archivo de solicitud de salida

certreq -submit -config \ reqfile.req // Envía la solicitud de certificado a la CA

Una vez que esto esté completo, lo hará poder exportar el certificado como un pfx

Alternativamente, vaya a http://www.blacktipconsulting.com/Site/Products.html donde puse mi herramienta gratuita de línea de comandos que hace todo esto por usted y exporta el certificado como pfx una vez terminado

Mark Sutton
fuente
2

Como señaló Helvick, la respuesta de PKCS10 es PKCS7 y no contiene la clave privada. Entonces, al generar la CSR, debería haber generado el archivo privatekey.key. Puedes usar los siguientes comandos. (Sé que esta es una pregunta de cuatro años, pero no pude hacerlo mientras seguía la discusión en la página).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

¡Buena suerte!

Saludos, JE

java_enthu
fuente
Puede que no necesites el -informargumento.
palswim
1

Podría estar equivocado, pero creo que su archivo PCKCS # 7 solo incluye la mitad pública de su certificado.

El archivo PKCS # 12 necesitaría tener ambas mitades, por lo tanto, necesita la -inkeyopción.

Alnitak
fuente