¿Necesito convertir .CER a .CRT para certificados SSL de Apache? ¿Si es así, cómo?


121

Necesito configurar un servidor Apache 2 con SSL.

Tengo mi archivo * .key, pero toda la documentación que encontré en línea, los archivos * .crt están especificados y mi CA solo me proporcionó un archivo * .cer.

¿Son los archivos * .cer lo mismo que * .crt? Si no es así, ¿cómo puedo convertir CER a formato CRT?


11
CERy las CRTextensiones no significan nada. Los diferentes proveedores de PKI utilizan diferentes extensiones para lo mismo. Si el archivo es binario, probablemente esté codificado en ASN.1 / DER. Si el archivo es legible por humanos -----BEGIN CERTIFICATE-----, entonces está codificado en PEM. ¿Qué tienes (DER o PEM) y qué necesitas (DER o PEM)?
jww

Respuestas:


106

Las extensiones de archivo para certificados criptográficos no están tan estandarizadas como cabría esperar. De forma predeterminada, Windows trata el doble clic en un .crtarchivo como una solicitud para importar el certificado al almacén de certificados raíz de Windows, pero trata un .cerarchivo como una solicitud solo para ver el certificado. Por lo tanto, son diferentes en el sentido de que Windows tiene un significado diferente inherente para lo que sucede cuando hace doble clic en cada tipo de archivo.

Pero la forma en que Windows los maneja cuando hace doble clic en ellos es la única diferencia entre los dos. Ambas extensiones solo representan que contiene un certificado público. Puede cambiar el nombre de un archivo de certificado para usar una extensión en lugar de la otra en cualquier sistema o archivo de configuración que haya visto. Y en las plataformas que no son de Windows (e incluso en Windows), las personas no son particularmente cuidadosas con la extensión que usan y las tratan a ambas indistintamente, ya que no hay diferencia entre ellas siempre que el contenido del archivo sea correcto.

Para hacer las cosas más confusas es que hay dos formas estándar de almacenar datos de certificados en un archivo: una es una codificación X.509 "binaria" y la otra es una codificación base64 de "texto" que generalmente comienza con " -----BEGIN CERTIFICATE-----". Estos codifican los mismos datos pero de diferentes formas. La mayoría de los sistemas aceptan ambos formatos, pero, si lo necesita, puede convertir uno a otro a través de openssl u otras herramientas. La codificación dentro de un archivo de certificado es realmente independiente de la extensión que alguien le dio al archivo.


Tengo entendido que ambas son codificaciones X.509. No dice lo contrario, pero el uso asimétrico de x.509 anterior podría sugerir lo contrario al lector. Para el lector, vale la pena señalar que los certificados se pueden convertir entre estas 2 codificaciones, porque, como menciona esta respuesta, contienen la misma información. Vea la otra respuesta con los comandos openssl x509 -inform.
FreeText

55

Según la documentación mod_ssl :

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

El archivo de certificado debe estar codificado en PEM. Archivo de certificado X.509:

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

¿Resolverá esto los errores de certificado ssl, cuando está atrasado zscaler, ejecutándose vagranten win( vbox homestead), al instalar nuestros certificados raíz de confianza en la caja vagabunda? Los hice scp, luego usé su conversión y los vinculé simbólicamente /etc/ssl/certsy también copié el contenido en el ca-certificates.crtarchivo antes de reaprovisionar, y todavía recibo un google-recaptcha tls sslerror file_get_contentsen el cuadro de desarrollo.
culpar

54

Básicamente, existen dos tipos de codificación de certificados CER, DER y Base64. Cuando el tipo DER devuelve un certificado de carga de error (rutinas de codificación asn1), pruebe el PEM y funcionará.

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

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


3
El formato DER funcionó para mí cuando mi archivo cer parecía binario cuando intenté editarlo ... ¡gracias!
Brad Parks

1
Para el lector, la página de manual de openssl me resultó útil. Para mí era ambiguo cuál de los comandos hizo qué (es decir, de qué manera fue la conversión). El parámetro -inform especifica el formato del archivo de entrada -in, que es intuitivo, pero si ya está un poco confundido, es bueno saberlo explícitamente. Ver openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText

32

Supongo que tiene un archivo .cer que contiene datos de certificados codificados en PKCS # 7 y desea convertirlos a datos de certificados codificados con PEM (normalmente un archivo .crt o .pem). Por ejemplo, un archivo .cer que contiene datos codificados en PKCS # 7 se ve así:

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

Los datos del certificado PEM tienen este aspecto:

----- COMENZAR CERTIFICADO -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- CERTIFICADO FINAL -----

Existe un comando OpenSSL que convertirá archivos .cer (con datos PKCS # 7) a los datos PEM que puede esperar encontrar (el BEGIN CERTIFICATEbloque en el ejemplo anterior). Puede convertir los datos PKCS # 7 en formato PEM mediante este comando en un archivo que llamaremos certfile.cer:

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

Tenga en cuenta que un archivo .cer o .pem puede contener uno o más certificados (posiblemente toda la cadena de certificados).


1
Sería útil si tuviera una fuente de esta suposición. Creo que la gente usa (posiblemente incorrectamente) .cer, .crt, .pem indistintamente), por lo que tener una fuente de verdad corregiría los conceptos erróneos.
PhilT

30

CER es un certificado X.509 en formato binario, codificado en DER .
CRT es un certificado binario X.509, encapsulado en codificación de texto ( base-64 ).

No es la misma codificación.


13
Esta respuesta es simplemente incorrecta. Tanto .CER como .CRT pueden usar codificación DER o PEM (texto). Las extensiones .pem y .der reflejan la codificación, mientras que .cer y .crt no. Más detalles .
EIS

1
En realidad, debería ser lo contrario. Pero todas esas extensiones se han confundido durante mucho tiempo, por lo que no debes confiar en ellas.
Claudio Floreani

16

La respuesta a la pregunta de cómo convertir un archivo .cer en un archivo .crt (¡están codificados de manera diferente!) Es:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
¡Esto no funcionó para mí! openssl x509 -inform der -in certificate.cer -out certificate.pem
Usé

Recibo este mensaje de error:unable to load PKCS7 object
friederbluemle

@friederbluemle, ¿revisaste esta respuesta? serverfault.com/questions/417140/…
Alexander Presber

Esto es lo que tuve que hacer para que mi certificado de SSL positivo estuviera listo para convertirse en PKCS12 para usarlo en Azure.
Owen

16

Yo uso el comando:

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

Pero CER es un certificado X.509 en formato binario, codificado en DER. CRT es un certificado binario X.509, encapsulado en codificación de texto (base-64).

Por eso, quizás debas usar:

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

Y luego para importar su certificado:

Copie su CA a dir:

/usr/local/share/ca-certificates/

Usar comando:

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

Actualice la tienda de CA:

sudo update-ca-certificates


5

Si su archivo cer tiene formato binario, debe convertirlo por

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

3

Los archivos .cer y .crt deben ser intercambiables en cuanto a importarlos a un almacén de claves.

Eche un vistazo al contenido del archivo .cer. Borre cualquier cosa antes -----BEGIN CERTIFICATE-----y después de la -----END CERTIFICATE-----línea. Te quedarás con las líneas BEGIN / END con un montón de cosas codificadas en Base64 entre ellas.

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

Luego, simplemente impórtelo a su archivo de claves usando keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

Lo que me ayudó fue su comentario de CODIFICACIÓN BASE-64. Un certificado normal aparentemente es una codificación especial y no se puede leer en texto plano. Gracias.
DRapp

-2

Solo haz

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
¿Le importaría explicar qué hace exactamente esta línea y por qué utiliza exactamente esos parámetros? Esta respuesta es bastante breve y puede resultar difícil de entender para personas con menos experiencia.
GameDroids
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.