Dois-je convertir .CER en .CRT pour les certificats SSL Apache? Si c'est le cas, comment?

121

J'ai besoin de configurer un serveur Apache 2 avec SSL.

J'ai mon fichier * .key, mais toute la documentation que j'ai trouvée en ligne, les fichiers * .crt sont spécifiés et mon autorité de certification ne m'a fourni qu'un fichier * .cer.

Les fichiers * .cer sont-ils identiques à * .crt? Sinon, comment puis-je convertir CER au format CRT?

MN
la source
11
CERet les CRTextensions ne signifient rien. Différents fournisseurs de PKI utilisent différentes extensions pour la même chose. Si le fichier est binaire, il est probablement encodé en ASN.1 / DER. Si le fichier est lisible par l'homme avec -----BEGIN CERTIFICATE-----, alors son PEM est encodé. De quoi avez-vous (DER ou PEM) et de quoi avez-vous besoin (DER ou PEM)?
jww

Réponses:

106

Les extensions de fichier pour les certificats cryptographiques ne sont pas vraiment aussi standardisées que vous le pensez. Windows par défaut traite le double-clic sur un .crtfichier comme une demande d'importation du certificat dans le magasin de certificats racine Windows, mais traite un .cerfichier comme une demande uniquement pour afficher le certificat. Donc, ils sont différents en ce sens que Windows a une signification différente inhérente à ce qui se passe lorsque vous double-cliquez sur chaque type de fichier.

Mais la façon dont Windows les gère lorsque vous double-cliquez dessus est à peu près la seule différence entre les deux. Les deux extensions représentent simplement qu'il contient un certificat public. Vous pouvez renommer un fichier de certificat pour utiliser une extension à la place de l'autre dans n'importe quel système ou fichier de configuration que j'ai vu. Et sur les plates-formes non Windows (et même sous Windows), les gens ne font pas particulièrement attention à l'extension qu'ils utilisent et les traitent tous les deux de manière interchangeable, car il n'y a pas de différence entre eux tant que le contenu du fichier est correct.

Ce qui rend les choses encore plus confuses, c'est qu'il existe deux manières standard de stocker des données de certificat dans un fichier: l'une est un encodage X.509 "binaire" et l'autre est un encodage base64 "texte" qui commence généralement par " -----BEGIN CERTIFICATE-----". Ceux-ci encodent les mêmes données mais de différentes manières. La plupart des systèmes acceptent les deux formats, mais si vous en avez besoin, vous pouvez convertir l'un en l'autre via openssl ou d'autres outils. Le codage dans un fichier de certificat est vraiment indépendant de l'extension que quelqu'un a donné au fichier.

TylerH
la source
Je crois comprendre que ce sont tous les deux des encodages X.509. Vous ne dites pas le contraire, mais l'utilisation asymétrique de x.509 ci-dessus pourrait suggérer le contraire à un lecteur. Pour le lecteur, il convient de noter que les certificats peuvent être convertis dans les deux sens entre ces 2 encodages, car comme le mentionne cette réponse, ils contiennent les mêmes informations. Voir l'autre réponse avec les commandes openssl x509 -inform.
FreeText
55

Selon la documentation mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

Le fichier de certificat doit être un fichier de certificat X.509 codé PEM:

openssl x509 -inform DER -in certificate.cer -out certificate.pem
Dmitry Grigansky
la source
Cela résoudra-t-il les erreurs de cert ssl, lorsqu'elles sont derrière zscaler, exécutées vagrantsur win( vbox homestead), en installant nos certificats racine de confiance dans la boîte vagrant? Je scples ai utilisés, puis j'ai utilisé votre conversion et je les ai liés par un lien symbolique et j'ai /etc/ssl/certségalement copié le contenu dans le ca-certificates.crtfichier avant le réapprovisionnement, et j'obtiens toujours une google-recaptcha tls sslerreur file_get_contentssur la boîte de développement.
blamb
54

Fondamentalement, il existe deux types de codage de certificat CER, DER et Base64. Lorsque le type DER renvoie un certificat de chargement d'erreur (routines de codage asn1), essayez le PEM et cela fonctionnera.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Liibo
la source
3
Le format DER a fonctionné pour moi lorsque mon fichier cer ressemblait à du binaire lorsque j'ai essayé de le modifier ... merci!
Brad Parks
1
Pour le lecteur, j'ai trouvé la page de manuel openssl utile. Il était ambigu pour moi laquelle des commandes faisait quoi (c'est-à-dire de quelle manière était la conversion). Le paramètre -inform spécifie le format du fichier d'entrée -in, ce qui est intuitif, mais si vous êtes déjà un peu confus, il est bon de le savoir explicitement. Voir openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText
32

Je suppose que vous avez un fichier .cer contenant des données de certificat codées PKCS # 7 et que vous souhaitez le convertir en données de certificat codées PEM (généralement un fichier .crt ou .pem). Par exemple, un fichier .cer contenant des données encodées PKCS # 7 ressemble à ceci:

----- COMMENCER PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- FIN PKCS7 -----

Les données du certificat PEM ressemblent à ceci:

----- DÉBUT DU CERTIFICAT -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- FIN DU CERTIFICAT -----

Il existe une commande OpenSSL qui convertira les fichiers .cer (avec les données PKCS # 7) en données PEM que vous vous attendez peut-être à rencontrer (le BEGIN CERTIFICATEbloc dans l'exemple ci-dessus). Vous pouvez forcer les données PKCS # 7 au format PEM par cette commande sur un fichier que nous appellerons certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

Notez qu'un fichier .cer ou .pem peut contenir un ou plusieurs certificats (éventuellement toute la chaîne de certificats).

Karl Ward
la source
1
Ce serait pratique si vous aviez une source de cette hypothèse. Je pense que les gens utilisent (peut-être incorrectement) .cer, .crt, .pem de manière interchangeable) donc avoir une source de vérité corrigerait les idées fausses.
PhilT
30

CER est un certificat X.509 sous forme binaire, codé DER .
CRT est un certificat binaire X.509, encapsulé dans un encodage texte ( base 64 ).

Ce n'est pas le même encodage.

Spawnrider
la source
13
Cette réponse est tout simplement fausse. Les deux .CER et .CRT peuvent utiliser le codage DER ou PEM (texte). Les extensions .pem et .der reflètent l'encodage, .cer et .crt ne le font pas. Plus de détails .
eis le
1
En fait, ce devrait être le contraire. Mais toutes ces extensions sont confuses depuis longtemps, vous ne devriez donc pas vous y fier.
Claudio Floreani
16

La réponse à la question de savoir comment convertir un fichier .cer en fichier .crt (ils sont encodés différemment!) Est:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt
Alexander Presber
la source
5
Cela n'a pas fonctionné pour moi! J'ai utilisé:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59
Je reçois ce message d'erreur:unable to load PKCS7 object
friederbluemle
@friederbluemle avez-vous vérifié cette réponse? serverfault.com/questions/417140/…
Alexander Presber
C'est ce que j'ai dû faire pour que mon certificat positiveSSL soit prêt à être converti en PKCS12 pour une utilisation dans Azure.
Owen
16

J'utilise la commande:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Mais CER est un certificat X.509 sous forme binaire, encodé DER. CRT est un certificat binaire X.509, encapsulé dans un encodage texte (base 64).

Pour cette raison, vous devriez peut-être utiliser:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

Et puis pour importer votre certificat:

Copiez votre autorité de certification dans dir:

/usr/local/share/ca-certificates/

Utilisez la commande:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

Mettez à jour le magasin CA:

sudo update-ca-certificates

Hugo LM
la source
5

Si votre fichier cer a un format binaire, vous devez le convertir en

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt
Mustafa Burak Kalkan
la source
3

Les fichiers .cer et .crt doivent être interchangeables en ce qui concerne leur importation dans un keystore.

Jetez un œil au contenu du fichier .cer. Effacez tout ce qui se trouve avant -----BEGIN CERTIFICATE-----et après la -----END CERTIFICATE-----ligne. Vous vous retrouverez avec les lignes BEGIN / END avec un tas de trucs encodés en Base64 entre elles.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

Ensuite, importez-le simplement dans votre fichier de clés à l'aide de keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer
Gene Gotimer
la source
Ce qui m'a aidé, c'est votre commentaire sur ENCODAGE BASE-64. Un certificat normal est apparemment un encodage spécial et n'est pas lisible en texte brut. Merci.
DRapp
-2

Fais juste

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt
Mutuma
la source
8
Souhaitez-vous préciser ce que cette ligne fait exactement et pourquoi vous utilisez exactement ces paramètres? Cette réponse est assez courte et peut être difficile à comprendre pour les personnes moins expérimentées.
GameDroids