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

33

Estou configurando o SSL para o meu domínio hoje e descobri outro problema - esperava que alguém pudesse esclarecer ...

Eu continuo recebendo as seguintes mensagens de erro:

[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

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

Felicidades!

Edite > > Ao tentar verificar o .crt Não 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

Também > >

>> 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

Edite > > (Felicidades pela ajuda, a propósito)

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

Apenas enviei um e-mail para a empresa que forneceu o certificado, eles responderam >

I have checked the CSR file that you have provided and I can assure that this was correctly generated. The error that you are currently encountering is caused because you are using a wrong command line for installing the CSR. You will need to modify this domain.com.crt from your command line with the according name of your domain.

  • atualmente o crt está configurado para mysite.com.crt - eu usei o domínio.com.crt como um exemplo
por williamsowen 29.09.2011 / 18:56

13 respostas

46

É possível que as linhas sejam terminadas em M? Esse é um problema em potencial ao mover arquivos do Windows para sistemas UNIX. Uma maneira fácil de verificar é usar vi no 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, como este

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

você tem um arquivo no formato de terminação de linha do Windows, e o apache não adora isso.

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

    
por 29.09.2011 / 23:38
15

Para quem chegar nesta página com um erro semelhante ao tentar ler um CSR (Certificate Signing Request) (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
    
por 26.12.2013 / 12:21
14

Apenas dei voltas e voltas em círculos sobre isso, e descobri que eu tinha os certificados da maneira errada - por exemplo,

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

em vez de:

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

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

    
por 16.07.2013 / 12:46
10

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

Isso demorou horas para ser diagnosticado e, no final, adivinhei, editei o certificado no vi e deletei os caracteres "-" existentes e os redigi novamente.

Espero que isso ajude alguém.

    
por 26.04.2014 / 16:53
8
>> 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

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

Execute os dois comandos a seguir e forneça a saída:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 
    
por 30.09.2011 / 05:34
8

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

Descobri isso seguindo o seguinte guia útil: link

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

    
por 29.10.2014 / 19:51
3

Certifique-se de que seu arquivo não tenha espaços à direita ou iniciais no arquivo de certificado. Certifique-se de que não haja espaços ou espaços em branco no seu arquivo de certificado, selecionando todo o texto 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: no seu outro post você diz que o seu arquivo .key tem o nome my domain.com.crt enquanto na configuração vhost você tem 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 novamente se todos os arquivos acima realmente existem e são válidos.

    
por 29.09.2011 / 19:03
1

Alguém deve se deparar com esse problema e seus logs de erro do Apache dizem algo como:

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

Certifique-se de não ter trocado seus arquivos de chave e certificado nas declarações na configuração do apache. Eu tinha apontado 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 destacá-lo como outro problema / solução em potencial.

    
por 09.07.2013 / 22:41
0

Meu problema (ter o mesmo erro ao instalar um novo servidor com o Apache 2.4) era que o Apache (2.4) não podia ler o arquivo .crt binário. Eu o importei no meu armazenamento de certificados pessoais (com mmc) e os exportei como X.509 codificado na base 64 (.cer). Renomeou o arquivo exportado com 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.

    
por 05.06.2015 / 16:06
0

No meu caso, tem a ver com a BOM 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 o melhor caminho deve ser:

vi -c 'se nobomb' -c wq ssl.crt
    
por 03.12.2015 / 14:33
0

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

    
por 14.05.2017 / 15:28
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 parecem iguais na superfície, mas aparentemente são diferentes por dentro.

    
por 20.09.2017 / 15:04
0

Eu tive esse problema porque recebi o conteúdo de um arquivo .p7b no estilo do IIS colado em um email. Ele tem as tags "----- BEGIN CERTIFICATE -----" e "----- END CERTIFICATE -----", exatamente como .pem, e o conteúdo usa uma codificação de base64 semelhante. Eu converti para um arquivo * .pem assim:

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

Depois disso, o Apache 2.2 ficou feliz.

    
por 03.10.2018 / 23:23