48 votos

Error SSL - no se puede leer el certificado del servidor desde el archivo

He estado configurando el SSL para mi dominio hoy, y me he encontrado con otro problema - esperaba que alguien pudiera arrojar algo de luz sobre..

Sigo recibiendo los siguientes mensajes de error:

\[error\] Init: Unable to read server certificate from file /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
\[error\] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1\_CHECK\_TLEN:wrong tag
\[error\] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1\_ITEM\_EX\_D2I:nested asn1 error

Estoy usando Apache 2.2.16 y Ubuntu 10.10. Mi archivo .crt tiene las etiquetas Begin y End, y ha sido copiado exactamente del correo electrónico de confirmación que recibí, ¡muy frustrante!

¡Salud!

Editar >> Al intentar verificar el .crt no parece funcionar:

\>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM\_read\_bio:no start line:pem\_lib.c:650:Expecting: TRUSTED CERTIFICATE

También >>

\>> openssl x509 -text -inform PEM -in domain.com.crt
unable to load certificate
21321:error:0906D06C:PEM routines:PEM\_read\_bio:no start line:pem\_lib.c:650:Expecting: TRUSTED CERTIFICATE
    \>> openssl x509 -text -inform DER -in domain.com.crt
unable to load certificate
21325:error:0D0680A8:asn1 encoding routines:ASN1\_CHECK\_TLEN:wrong tag:tasn\_dec.c:1316:
21325:error:0D07803A:asn1 encoding routines:ASN1\_ITEM\_EX\_D2I:nested asn1 error:tasn\_dec.c:380:Type=X509

Editar>> (Por cierto, gracias por la ayuda)

\>> grep '^-----' domain.com.crt
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Acabo de enviar un correo electrónico a la empresa que proporciona el certificado, y han respondido>

He comprobado el archivo CSR que me has proporcionado y puedo asegurar que se ha generado correctamente. El error que está encontrando error que está encontrando se debe a que está utilizando una línea de comandos incorrecta para instalar el CSR. Deberá modificar este dominio.com.crt desde su línea de comandos con el nombre correspondiente de su dominio.

  • actualmente el crt está configurado en mysite.com.crt - he utilizado domain.com.crt como ejemplo

0 votos

¿Podría mostrarnos la salida de grep '^-----' domain.com.crt ?

0 votos

Williamsowen, el objetivo de un certificado es que se muestre a cualquiera que se conecte a tu servidor web; no es algo privado. Dicho esto, ¿considerarías adjuntar o publicar el certificado completo aquí para que podamos verlo directamente en lugar de tener que adivinarlo?

0 votos

Espera, veo que acabas de aceptar mi respuesta. ¿Significa eso que el problema lo causaban los errores de línea del terminal de Windows?

55voto

MadHatter Puntos 44059

¿Es posible que las líneas estén terminadas ^M? Este es un problema potencial cuando se mueven archivos de Windows a sistemas UNIX. Una forma fácil de comprobarlo es utilizar vi en modo "muéstrame el binario", con vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt .

Si cada línea termina con un control-M, así

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

tienes un archivo en formato de línea terminada de Windows, y a apache no le gustan.

Sus opciones incluyen mover el archivo de nuevo, teniendo más cuidado; o usar el dos2unix para eliminarlos; también puedes eliminarlos dentro de vi, si tienes cuidado.


Editar : gracias a @dave_thompson_085, que señala que esta respuesta ya no es válida en 2019. Es decir, Apache/OpenSSL son ahora tolerantes con las líneas terminadas en ^M, por lo que no causan problemas. Dicho esto, otros errores de formato, varios ejemplos diferentes de los cuales aparecen en los comentarios, todavía pueden causar problemas; compruebe cuidadosamente para estos si el certificado se ha movido a través de los sistemas.

2 votos

Para mí fue un error de copiar y pegar, omitiendo los primeros caracteres de la cabecera -----BE ... Gracias por la inspiración para volver a comprobarlo.

0 votos

Gracias, este era mi problema. En notepad++ en Windows puedes usar el diálogo de conversión EDIT-EOL para cambiar el formato LF correcto. Y puedes usar el menú Ver-Mostrar Símbolo para ver realmente los finales de línea CR LF de Windows.

1 votos

Mi certificado simplemente terminó siendo un archivo vacío. Algo se rompió en la generación supongo. Esta respuesta me animó a abrirlo y ver eso.

25voto

Para cualquiera que llegue a esta página con un error similar al intentar leer una solicitud de firma de certificado (CSR) (tenga en cuenta que el OP está leyendo un certificado): asegúrese de utilizar el comando OpenSSL correcto. x509 es para los certificados y req es para los RSC:

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout

21voto

quanta Puntos 31979
>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Sospecho que tiene un problema con el formato del certificado.

Ejecuta los dos comandos siguientes y danos la salida:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt

0 votos

Gracias por esta respuesta. Pude determinar que el formato de mis SAs proporcionados como ".cer" ya eran ".pem" de incógnito

11voto

Scott Davey Puntos 161

En mi caso, encontré que mi certificado tenía diferentes caracteres "-". Debe haber sido un problema de copiar/pegar del administrador que colocó el certificado en el servidor, con el editor de texto sustituyendo -- por un carácter unicode especial en el camino.

Esto me llevó horas de diagnóstico, y al final simplemente lo adiviné, y edité el cert en vi y borré los caracteres "-" existentes, y los volví a escribir.

Espero que esto ayude a alguien.

4voto

George Tasioulis Puntos 1423

Asegúrese de que su archivo no tiene espacios finales o iniciales dentro del archivo del certificado. Asegúrese de que no hay espacios en blanco en su archivo de certificado, seleccionando todo el texto y buscando espacios en blanco en un editor de sólo texto.

Compruebe también si todos los archivos configurados existen y son correctos.

Por ejemplo: en tu otro post dices que tu archivo .key se llama mi dominio.com.crt mientras que en la configuración del vhost tienes dominio.com.crt

SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key
SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt
SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt

Compruebe de nuevo que todos los archivos anteriores existen realmente y son válidos.

2 votos

Comprueba también que tus guiones son guiones. A los editores de texto microsoftianos les gusta cambiar -- en que no era muy divertido de solucionar.

0 votos

Yeap, ya que estás en Ubuntu, sólo tienes que abrir un terminal y usar nano, por ejemplo. Así estarás seguro.

0 votos

Hola, gracias por tus comentarios. He comprobado todo y todo está bien. He tratado de verificar el archivo crt sin embargo consigo: sudo openssl x509 -noout -text -in domain.com.crt unable to load certificate 16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: