Erro SSL - não é possível ler o certificado do servidor do arquivo


37

Hoje, estou configurando o SSL para o meu domínio e resolvi outro problema - esperava que alguém pudesse lançar alguma luz ..

Continuo recebendo as seguintes mensagens de erro:

[erro] Init: Não foi possível ler o certificado do servidor do arquivo /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
[error] Erro da biblioteca SSL: 218529960 erro: 0D0680A8: rotinas de codificação asn1: ASN1_CHECK_TLEN: tag incorreta
[erro] Erro na biblioteca SSL: erro 218595386: 0D07803A: rotinas de codificação asn1: ASN1_ITEM_EX_D2I: erro asn1 aninhado

Estou executando o Apache 2.2.16 e o ​​Ubuntu 10.10. Meu arquivo .crt possui as tags Begin e End e foi copiado exatamente do e-mail de confirmação que recebi, muito frustrante!

Felicidades!

Editar >> Ao tentar verificar o .crt Não parece funcionar:

>> openssl x509 -noout -text -in domain.com.crt 
incapaz de carregar o certificado
16851: erro: 0906D06C: rotinas PEM: PEM_read_bio: nenhuma linha de partida: pem_lib.c: 650: Esperando: CERTIFICADO CONFIÁVEL

Também >>

>> openssl x509 -text -informa PEM -in domain.com.crt
incapaz de carregar o certificado
21321: erro: 0906D06C: rotinas PEM: PEM_read_bio: nenhuma linha de partida: pem_lib.c: 650: Esperando: CERTIFICADO CONFIÁVEL
>> openssl x509 -text -forma DER em domain.com.crt
incapaz de carregar o certificado
21325: erro: 0D0680A8: rotinas de codificação asn1: ASN1_CHECK_TLEN: etiqueta incorreta: tasn_dec.c: 1316:
21325: erro: 0D07803A: rotinas de codificação asn1: ASN1_ITEM_EX_D2I: erro asn1 aninhado: tasn_dec.c: 380: Type = X509

Edit >> (Aplausos pela ajuda, por sinal)

>> grep '^ -----' domain.com.crt
----- COMEÇAR CERTIFICADO -----
----- TERMINAR CERTIFICADO -----

Acabei de enviar um e-mail à empresa fornecedora do certificado, eles responderam>

Verifiquei o arquivo CSR que você forneceu e posso garantir que isso foi gerado corretamente. O erro que você está encontrando no momento é causado porque você está usando uma linha de comando errada para instalar o CSR. Você precisará modificar este domain.com.crt na sua linha de comando com o nome correspondente do seu domínio.

  • atualmente o crt está configurado para mysite.com.crt - usei domain.com.crt como exemplo

Você poderia nos mostrar a saída de grep '^-----' domain.com.crt?
— quanta de

Williamsowen, todo o objetivo de um certificado deve ser mostrado a qualquer pessoa que se conectar ao seu servidor da web; não é uma coisa privada. Dado isso, você consideraria anexar ou postar todo o certificado aqui para que possamos examiná-lo diretamente em vez de precisar adivinhar?
— MadHatter apoia Monica

Espere, vejo que você acabou de aceitar minha resposta. Isso significa que os terminais de linha do Windows estavam causando o problema?
— MadHatter apoia Monica

MadHatter - desculpas! Novato nisso, mas acabei de trabalhar, a formatação do e-mail que recebi estava desativada, não consegui agradecer o suficiente!
— williamsowen

Respostas:


49

É possível que as linhas sejam ^ M-terminadas? Esse é um problema em potencial ao mover arquivos dos sistemas Windows para UNIX. Uma maneira fácil de verificar é usar vino modo "mostre-me o binário", com vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt.

Se cada linha terminar com um controle-M, assim

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

você tem um arquivo no formato terminado por linha do Windows e o apache não os ama.

Suas opções incluem mover o arquivo novamente, tendo mais cuidado; ou usando o dos2unixcomando para remover esses; você também pode removê-los dentro do vi, se tiver cuidado.


Edit : graças a @ dave_thompson_085, que salienta que esta resposta não se aplica mais em 2019. Ou seja, o Apache / OpenSSL agora são tolerantes a ^ linhas terminadas em M, para que não causem problemas. Dito isto, outros erros de formatação, vários exemplos diferentes dos que aparecem nos comentários, ainda podem causar problemas; verifique cuidadosamente se o certificado foi movido pelos sistemas.


Para mim, foi um erro de copiar e colar, omitindo os dois primeiros caracteres do cabeçalho -----BE... Obrigado pela inspiração para verificar!
— TPI

Obrigado, este foi o meu problema! No bloco de notas ++ no Windows, você pode usar a caixa de diálogo de conversão EDIT-EOL para alterar o formato LF correto. E você pode usar o menu View-Show Symbol para realmente ver as terminações da linha CR LF do Windows.
— Bjørn

11
Meu certificado acabou sendo um arquivo vazio. Algo quebrou na geração, eu acho. Essa resposta me incentivou a abri-la e ver isso.
— Flickerfly

Nota para usuários do Windows: você provavelmente precisará converter o formato de linha para UNIX, mesmo se estiver no Windows. O DOS2UNIX não é um comando do Windows, mas um comando do Linux. A boa notícia que o Git for Windows fornece. O CigWin provavelmente também, mas não tem certeza.
— Ignacio Segura

Nota para usuários do Windows: uma lista de permissões na guia Propriedades / Segurança do Windows Explorer é alterada após a cópia de um arquivo de permissões restritas de um compartilhamento de rede com o cp do Cygwin. Por exemplo, vi um "NUL SID", uma entrada desativada de Todos e usuários do domínio.
— enguia ghEEz

19

Para quem chega a esta página com um erro semelhante ao tentar ler uma Solicitação de assinatura de certificado (CSR) (observe que o OP está lendo um certificado): certifique-se de usar o comando OpenSSL correto. x509é para certificados e reqé para CSRs:

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout

17

Simplesmente dei voltas e voltas em círculos sobre isso, e aconteceu que eu tinha os certificados no caminho errado - por exemplo

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

ao invés de:

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

Algo para verificar se você está recebendo esse erro.


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

Eu suspeito que você tenha um problema com o formato do certificado.

Execute os dois comandos a seguir e nos dê a saída:

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

Obrigado por esta resposta. Eu era capaz de determinar o formato meus SAs fornecido como "cer" já eram ".pem" incognito
— javafueled

10

No meu caso, descobri que meu certificado tinha caracteres "-" diferentes. Deve ter havido um problema de copiar / colar do administrador que colocou o certificado no servidor, substituindo o editor de texto - por um caractere unicode especial ao longo do caminho.

Isso levou horas para diagnosticar e, no final, eu adivinhei, editou o certificado no vi e excluiu os caracteres "-" existentes e os redigitou.

Espero que isso ajude alguém.


8

No meu caso, encontrei os erros do OP porque quem criou o arquivo .crt para mim realmente criou um arquivo formatado .PEM e o nomeou .crt.

Descobri isso executando o seguinte guia útil: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -para convertê-los

tudo o que eu precisava fazer era renomear meu .crt para .pem, e estava pronto! O guia indicou que os erros da pergunta do OP implicam que o arquivo de entrada já esteja no formato PEM, portanto, tentar convertê-lo em .pem a partir de um formato DER não pode ser feito e é de fato desnecessário.


4

Verifique se o arquivo não possui espaços à direita ou à esquerda no arquivo de certificado. Verifique cuidadosamente se não há espaços ou espaços em branco no seu arquivo de certificado, selecionando o texto inteiro e procurando espaços em branco em um editor somente de texto.

Verifique também se todos os arquivos configurados existem e estão corretos.

Por exemplo: em sua outra postagem, você diz que seu arquivo .key é nomeado como meu domínio.com.crt, enquanto na configuração do vhost você tem domínio.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 novamente se todos os arquivos acima realmente existem e são válidos.


11
Verifique também se seus traços são traços. Editores de texto Microsoftian gostaria de mudar --em –; isso não foi muito divertido de solucionar.
— Shane Madden

sim, como você está no Ubuntu, basta abrir um terminal e usar o nano, por exemplo. Desta forma, você terá certeza.
— George Tasioulis

Olá, obrigado pelo seu feedback - verifiquei tudo e está tudo bem. Eu tentei verificar o arquivo crt, no entanto, eu recebo: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

11
A primeira linha do seu arquivo domain.com.crt começa -----BEGIN CERTIFICATE-----e a última linha termina com -----END CERTIFICATE-----?
— George Tasioulis

1

Caso alguém encontre esse problema e os logs de erro do apache digam algo como:

Init: Não foi possível ler o certificado do servidor no arquivo /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

Verifique se você não trocou seus arquivos de chave e certificado nas declarações na configuração do apache. Eu apontei a chave para o meu arquivo de certificado e o certificado para o meu arquivo de chave. Este post me ajudou a descobrir o problema, mas eu queria apontá-lo como outro possível problema / solução.


0

Meu problema (com o mesmo erro ao instalar um novo servidor com Apache 2.4) era que o Apache (2.4) não conseguia ler o arquivo .crt binário. Eu o importei no meu repositório de certificados pessoais (com mmc) e o exportei como X.509 codificado em base 64 (.cer). Renomeei o arquivo exportado para o mesmo nome (.crt) (usado no meu httpd-ssl.conf) e funcionou novamente! O mesmo certificado funcionou no meu servidor antigo, talvez o Apache 2.4 seja mais rigoroso que o 2.2? Boa sorte.


0

No meu caso, isso tem a ver com a lista técnica estar presente no arquivo. Pode-se despir assim:

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

Não tenho certeza se sempre leva 3 bytes, então a melhor maneira deve ser:

vi -c 'se nobomb' -c wq ssl.crt

0

Eu recebi o mesmo erro porque mudei .key com nomes de arquivos .crt


0

Eu tive um problema semelhante quando acidentalmente usei um certificado IIS do tipo p7b fornecido pelo cliente na configuração do apache. A conversão do certificado para o formato x509 corrigiu o erro. Ambos os tipos têm a mesma aparência na superfície, mas aparentemente são diferentes por dentro.


0

Eu tive esse problema porque me foi enviado o conteúdo de um arquivo .p7b no estilo IIS colado em um email. Possui as tags "----- BEGIN CERTIFICATE -----" e "----- END CERTIFICATE -----", assim como .pem, e o conteúdo usa uma codificação base64 de aparência semelhante. Eu o convertei para um arquivo * .pem da seguinte forma:

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

Depois disso, o Apache 2.2 ficou feliz.


0

Recentemente, tive esse problema usando o Lets Encrypt (letsencrypt) no Windows. O certificado voltou codificado como UTF-16LE. Convertê-lo em UTF-8 (usando dos2unix) resolveu o problema.


0

No meu caso, eram apenas as linhas vazias. Quando colei o arquivo crt do ntepad ou do bloco de notas ++ no nano sempre ficava como

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

remover os espaços vazios e colocar tudo em uma linha resolveu o problema.

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.