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
williamsowen
fonte
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.

MadHatter apoia Monica
fonte
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
Martijn de Milliano
fonte
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.

Adrian Macneil
fonte
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 
quanta
fonte
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.

Scott Davey
fonte
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.

Freya301
fonte
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.

George Tasioulis
fonte
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.

Josh
fonte
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.

Bater
fonte
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
x-yuri
fonte
0

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

Tobia
fonte
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.

Uwe
fonte
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.

Derek
fonte
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.

Jeff Hoye
fonte
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
Teodor
fonte