¿Cómo puedo convertir un archivo de certificado PFX para usarlo con Apache en un servidor Linux?

110

¿Cómo puedo convertir un archivo de certificado PFX para usarlo con Apache en un servidor Linux?

Creé el PFX desde Windows Certificate Services. El PFX contiene toda la cadena de certificados. (Que es solo una raíz y el certificado principal, no intermedio).

Guíame, sabios.

AaronJAnderson
fuente

Respuestas:

194

Con OpenSSL puede convertir pfx a formato compatible con Apache con los siguientes comandos:

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key   

El primer comando extrae la clave pública para domain.cer.
El segundo comando extrae la clave privada a domain.key.

Actualice su archivo de configuración de Apache con:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>
Matej
fuente
Falta el comando para generar el archivo de la autoridad de certificación. La respuesta a continuación es más completa.
Hawkee
100

Además de

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key

También generé el certificado de la Autoridad de certificación (CA):

openssl pkcs12 -in domain.pfx -out domain-ca.crt -nodes -nokeys -cacerts

Y lo incluyó en el archivo de configuración de Apache:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 SSLCACertificateFile /path/to/domain-ca.crt
 ...
</VirtualHost>
Andron
fuente
8
Nota: si el certificado ca estará vacío, no incluya esta línea en el archivo de configuración.
Andron
@Andron cuando utilizo el tercer comando para crear el certificado CA, el resultado es un archivo crt vacío. Intenté usar el archivo pfx serverSSL y el archivo pfx rootCA para la entrada. (bitnami wamp) El resultado final es que firefox me da un The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERerror.
khargoosh
@khargoosh como informé en el comentario: si está vacío, simplemente no use / incluya esta línea. Tuve la misma situación.
Andron
31

Para que funcione con Apache, necesitábamos un paso adicional.

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain_encrypted.key
openssl rsa -in domain_encrypted.key -out domain.key

El comando final descifra la clave para usar con Apache. El archivo domain.key debería verse así:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----
Michael Ferrante
fuente
¡BONITO! Para Bitnami u otros que también necesiten el CA crt, mire la respuesta de Andron para incluir el CA crt. Use la nomenclatura server-ca.crt (en lugar de domain-ca.crt en la respuesta de Andron), server.crt (en lugar de domain.cer) y server.key (en lugar de domain.key) en la nomenclatura de Michael Ferrante contesta aquí.
OldGreg
3

Tomé algunas herramientas, pero esto es con lo que terminé.

Se generó e instaló un certificado en IIS7. Exportado como PFX desde IIS

Convierta a pkcs12

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

NOTA: Al convertir PFX a formato PEM, openssl colocará todos los certificados y la clave privada en un solo archivo. Deberá abrir el archivo en el editor de texto y copiar cada certificado y clave privada (incluidas las declaraciones BEGIN / END) en su propio archivo de texto individual y guardarlos como certificate.cer, CAcert.cer, privateKey.key respectivamente.

-----BEGIN PRIVATE KEY-----
Saved as certificate.key
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
Saved as certificate.crt
-----END CERTIFICATE-----

Agregado a apache vhost con Webmin.

AaronJAnderson
fuente
Si no desea que la clave privada y los certificados terminen en el mismo archivo, use -nokeys(no para extraer la clave privada) y -clcerts(para extraer solo el certificado). Esto es exactamente lo que dijo Matej.
Bruno
0

SSLSHopper tiene algunos artículos bastante completos sobre cómo moverse entre diferentes servidores.

http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html

Simplemente elija el enlace correspondiente en la parte inferior de esta página.

Nota: tienen un convertidor en línea que les da acceso a su clave privada. Probablemente se pueda confiar en ellos, pero sería mejor usar el comando OPENSSL (también se muestra en este sitio) para mantener la clave privada privada en su propia máquina.

Simon_Weaver
fuente