Comment puis-je convertir un fichier de certificat PFX pour l'utiliser avec Apache sur un serveur Linux?

110

Comment puis-je convertir un fichier de certificat PFX pour l'utiliser avec Apache sur un serveur Linux?

J'ai créé le PFX à partir des services de certificats Windows. Le PFX contient toute la chaîne de certificats. (Ce qui est juste une racine et le certificat principal, pas d'intermédiaire.)

Conduisez-moi, sages.

AaronJAnderson
la source

Réponses:

194

Avec OpenSSL, vous pouvez convertir pfx au format compatible Apache avec les commandes suivantes:

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

La première commande extrait la clé publique de domain.cer.
La deuxième commande extrait la clé privée vers domain.key.

Mettez à jour votre fichier de configuration Apache avec:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>
Matej
la source
Il manque la commande pour générer le fichier d'autorité de certification. La réponse ci-dessous est plus complète.
Hawkee
100

En plus de

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

J'ai également généré un certificat d'autorité de certification (CA):

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

Et inclus dans le fichier de configuration 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
la source
8
Remarque: si le certificat CA est vide, veuillez ne pas inclure cette ligne dans le fichier de configuration.
Andron
@Andron lorsque j'utilise la troisième commande pour créer le certificat CA, le résultat est un fichier crt vide. J'ai essayé d'utiliser à la fois le fichier pfx serverSSL et le fichier pfx rootCA pour l'entrée. (bitnami wamp) Le résultat final est que Firefox me donne une The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERerreur.
khargoosh
@khargoosh comme je l'ai signalé dans le commentaire: s'il est vide, n'utilisez / n'incluez pas cette ligne. J'ai eu la même situation.
Andron
31

Pour le faire fonctionner avec Apache, nous avions besoin d'une étape supplémentaire.

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

La dernière commande décrypte la clé à utiliser avec Apache. Le fichier domain.key devrait ressembler à ceci:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----
Michael Ferrante
la source
AGRÉABLE! Pour Bitnami ou d'autres ayant également besoin du crt CA, regardez la réponse d'Andron pour inclure le crt CA. Utilisez la nomenclature server-ca.crt (à la place de domain-ca.crt dans la réponse d'Andron), server.crt (à la place de domain.cer) et server.key (à la place de domain.key) dans Michael Ferrante's répondez ici.
OldGreg
3

J'ai pris quelques outils mais c'est ce que j'ai fini avec.

Généré et installé un certificat sur IIS7. Exporté en tant que PFX depuis IIS

Convertir en pkcs12

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

REMARQUE: lors de la conversion de PFX au format PEM, openssl placera tous les certificats et la clé privée dans un seul fichier. Vous devrez ouvrir le fichier dans l'éditeur de texte et copier chaque certificat et clé privée (y compris les instructions BEGIN / END) dans son propre fichier texte et les enregistrer respectivement sous certificate.cer, CAcert.cer, privateKey.key.

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

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

Ajouté à apache vhost w / Webmin.

AaronJAnderson
la source
Si vous ne voulez pas que la clé privée et les certificats se retrouvent dans le même fichier, utilisez -nokeys(ne pas extraire la clé privée) et -clcerts(pour extraire le certificat uniquement). C'est exactement ce que dit Matej.
Bruno
0

SSLSHopper a des articles assez détaillés sur le déplacement entre différents serveurs.

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

Choisissez simplement le lien correspondant au bas de cette page.

Remarque: ils disposent d'un convertisseur en ligne qui leur donne accès à votre clé privée. On peut probablement leur faire confiance, mais il serait préférable d'utiliser la commande OPENSSL (également affichée sur ce site) pour garder la clé privée privée sur votre propre machine.

Simon_Weaver
la source