Error de SSL: no se puede leer el certificado del servidor del archivo

37

He estado configurando SSL para mi dominio hoy, y he encontrado otro problema: esperaba que alguien pudiera arrojar algo de luz.

Sigo recibiendo los siguientes mensajes de error:

[error] Init: no se puede leer el certificado del servidor del archivo /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
[error] Error de biblioteca SSL: error 218529960: 0D0680A8: rutinas de codificación asn1: ASN1_CHECK_TLEN: etiqueta incorrecta
[error] Error de biblioteca SSL: error 218595386: 0D07803A: rutinas de codificación asn1: ASN1_ITEM_EX_D2I: error ann1 asn1

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

¡Aclamaciones!

Editar >> Al intentar verificar el .crt Parece que no funciona:

>> openssl x509 -noout -text -in domain.com.crt 
incapaz de cargar el certificado
16851: error: 0906D06C: rutinas PEM: PEM_read_bio: sin línea de inicio: pem_lib.c: 650: esperando: CERTIFICADO DE CONFIANZA

También >>

>> openssl x509 -text -inform PEM -in domain.com.crt
incapaz de cargar el certificado
21321: error: 0906D06C: rutinas PEM: PEM_read_bio: sin línea de inicio: pem_lib.c: 650: esperando: CERTIFICADO DE CONFIANZA
>> openssl x509 -text -inform DER -en dominio.com.crt
incapaz de cargar el certificado
21325: error: 0D0680A8: rutinas de codificación asn1: ASN1_CHECK_TLEN: etiqueta incorrecta: tasn_dec.c: 1316:
21325: error: 0D07803A: rutinas de codificación asn1: ASN1_ITEM_EX_D2I: error de asn1 anidado: tasn_dec.c: 380: Tipo = X509

Editar >> (Aplausos por la ayuda por cierto)

>> grep '^ -----' dominio.com.crt
----- COMIENCE EL CERTIFICADO -----
----- FINALIZAR CERTIFICADO -----

Acabo de enviar un correo electrónico a la empresa que proporciona el Certificado, respondieron>

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

  • Actualmente, el CRT está configurado para mysite.com.crt - He usado domain.com.crt como ejemplo
williamsowen
fuente
¿Podrías mostrarnos la salida de grep '^-----' domain.com.crt?
quanta
Williamsowen, todo el punto de un certificado debe mostrarse a cualquiera que se conecte a su servidor web; No es algo privado. Dicho esto, ¿consideraría adjuntar o publicar el certificado completo aquí para que podamos verlo directamente en lugar de tener que adivinar?
MadHatter apoya a Monica el
Espera, veo que acabas de aceptar mi respuesta. ¿Eso significa que fueron los avances de línea de Windows los que estaban causando el problema?
MadHatter apoya a Monica el
MadHatter - disculpas! Nuevo en esto, pero lo acabo de hacer funcionar, el formato del correo electrónico que recibí estaba apagado, ¡no podría agradecerles lo suficiente!
williamsowen

Respuestas:

49

¿Es posible que las líneas estén terminadas en ^ M? Este es un problema potencial al mover archivos de Windows a sistemas UNIX. Una manera fácil de verificar es usar el modo vi"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 en Windows y a apache no le encantan.

Sus opciones incluyen mover el archivo nuevamente, teniendo más cuidado; o usando el dos2unixcomando para quitarlos; También puede eliminarlos dentro de vi, si tiene cuidado.


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

MadHatter apoya a Monica
fuente
Para mí fue un error de copiar y pegar, omitiendo los primeros caracteres del encabezado -----BE... ¡Gracias por la inspiración para verificar!
cfi
Gracias, este fue mi problema! En notepad ++ en Windows puede usar el cuadro de diálogo de conversión EDIT-EOL para cambiar la configuración del formato LF correcto. Y puede usar el menú Ver-Mostrar símbolo para ver realmente las terminaciones de línea CR LF de Windows.
Bjørn
1
Mi certificado simplemente terminó siendo un archivo vacío. Algo se rompió en la generación, supongo. Esta respuesta me animó a abrirla y ver eso.
flickerfly
Nota para los usuarios de Windows: probablemente necesitará convertir el formato de línea a UNIX incluso si está en Windows. DOS2UNIX no es un comando de Windows, sino uno de Linux. La buena noticia es que Git para Windows lo proporciona. CigWin probablemente también, pero no estoy seguro de eso.
Ignacio Segura
Nota para los usuarios de Windows: se desordena una lista de permisos en la pestaña Propiedades / Seguridad del Explorador de Windows después de copiar un archivo de permisos restringidos de un recurso compartido de red con el cp de Cygwin. Por ejemplo, vi un "NUL SID", una entrada para todos deshabilitada y usuarios de dominio.
anguila ghEEz
19

Para cualquiera que llegue a esta página con un error similar cuando intente leer una Solicitud de firma de certificado (CSR) (tenga en cuenta que OP está leyendo un certificado): asegúrese de usar el comando OpenSSL correcto. x509es para certificados y reqes para CSR:

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout
Martijn de Milliano
fuente
17

Simplemente di vueltas y vueltas en círculos sobre esto, y resultó que tenía los certificados por el camino equivocado, por ejemplo

SSLCertificateFile    /etc/apache2/ssl/server.key
SSLCertificateKeyFile /etc/apache2/ssl/server.crt

en lugar de:

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Algo para verificar si está recibiendo este error.

Adrian Macneil
fuente
11
>> 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 el resultado:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 
quanta
fuente
Gracias por esta respuesta Pude determinar el formato que mis SA proporcionaron como ".cer" ya estaban ".pem" de incógnito
javafueled
10

En mi caso, descubrí 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 reemplazado, con un carácter unicode especial en el camino.

Tomó horas diagnosticarlo, y al final lo adiviné, edité el certificado en vi y eliminé los caracteres "-" existentes y los volví a escribir.

Espero que esto ayude a alguien.

Scott Davey
fuente
8

En mi caso, me encontré con los errores del OP porque quien creó el archivo .crt para mí en primer lugar realmente creó un archivo con formato .PEM y lo nombró .crt.

Descubrí esto al encontrarme con la siguiente guía útil: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -convertirlos

todo lo que tenía que hacer era cambiar el nombre de mi .crt a .pem, ¡y había terminado! La guía indicó que los errores de la pregunta del OP implican que el archivo de entrada ya está formateado PEM, por lo que no se puede intentar convertirlo a .pem desde un formato DER, y de hecho es innecesario.

Freya301
fuente
4

Asegúrese de que su archivo no tenga espacios finales o iniciales dentro del archivo del certificado. Asegúrese cuidadosamente de que no haya espacios o espacios en blanco dentro de su archivo de certificado, seleccionando todo el texto y buscando espacios en blanco en un editor de solo texto.

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

Por ejemplo: en su otra publicación dice que su archivo .key se llama my domain.com.crt mientras que en la configuración de vhost tiene domain.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

Verifique nuevamente que todos los archivos anteriores realmente existan y sean válidos.

George Tasioulis
fuente
1
También verifique que sus guiones sean guiones. A los editores de texto de Microsoft les gusta cambiar --a ; eso no fue muy divertido de solucionar.
Shane Madden
sí, como estás en Ubuntu, solo abre una terminal y usa nano, por ejemplo. De esta manera estarás seguro.
George Tasioulis
Hola, gracias por tu retroalimentación. Revisé todo y todo está bien. He intentado verificar el archivo crt sin embargo obtengo: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
williamsowen
1
¿Comienza la primera línea de su archivo domain.com.crt -----BEGIN CERTIFICATE-----y termina la última línea -----END CERTIFICATE-----?
George Tasioulis
1

Si alguien más se encuentra con este problema y sus registros de error de apache dicen algo como:

Init: No se puede leer el certificado del servidor del archivo /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

Asegúrese de no haber intercambiado sus archivos de clave y certificado en las declaraciones en la configuración de apache. Apunté la clave a mi archivo de certificado y el certificado a mi archivo de clave. Esta publicación me ayudó a resolver el problema, pero quería señalarlo como otro problema / solución potencial.

Josh
fuente
0

Mi problema (al tener el mismo error al instalar un nuevo servidor con Apache 2.4) fue que Apache (2.4) no podía leer el archivo binario .crt. Lo importé en mi almacén de certificados personales (con mmc) y lo exporté como X.509 codificado en base-64 (.cer). ¡Cambié el nombre del archivo exportado al mismo nombre (.crt) (usado en mi httpd-ssl.conf) y funcionó nuevamente! El mismo certificado funcionó en mi antiguo servidor, ¿tal vez Apache 2.4 es más estricto que 2.2? Buena suerte.

Golpetazo
fuente
0

En mi caso, tiene que ver con que BOM esté presente en el archivo. Uno podría despojarlo así:

tail -c +4 ssl.crt > ssl2.crt

No estoy seguro si siempre toma 3 bytes, por lo que la mejor manera debe ser:

vi -c 'se nobomb' -c wq ssl.crt
x-yuri
fuente
0

Recibí el mismo error porque cambié .key con nombres de archivo .crt

Tobia
fuente
0

Tuve un problema similar cuando accidentalmente usé un certificado IIS tipo p7b suministrado por el cliente en la configuración de apache. La conversión del certificado al formato x509 solucionó el error. Ambos tipos se ven iguales en la superficie pero aparentemente son diferentes en el interior.

Uwe
fuente
0

Tuve este problema porque me enviaron el contenido de un archivo .p7b de estilo IIS pegado en un correo electrónico. Tiene las etiquetas "----- BEGIN CERTIFICATE -----" y "----- END CERTIFICATE -----", al igual que .pem, y el contenido utiliza una codificación base64 similar. Lo convertí a un archivo * .pem así:

openssl pkcs7 -print_certs -in cert.p7b -out cert.cer

Después de eso, Apache 2.2 estaba feliz.

Derek
fuente
0

Recientemente tuve este problema al usar Lets Encrypt (letsencrypt) en Windows. El certificado volvió codificado como UTF-16LE. Convertirlo a UTF-8 (usando dos2unix) resolvió el problema.

Jeff Hoye
fuente
0

En mi caso fueron solo las líneas vacías. Cuando pegué el archivo crt desde ntepad o notepad ++ en nano siempre obtuve algo como

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

eliminar los espacios vacíos y poner todo en una línea resolvió el problema, por ejemplo:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Teodor
fuente