Estou configurando o SSL para o meu domínio hoje e encontrei outro problema - esperava que alguém pudesse esclarecer um pouco ..
Continuo recebendo as seguintes mensagens de erro:
[erro] Init: Não é possível ler o certificado do servidor do arquivo /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt [erro] Erro de biblioteca SSL: 218529960 erro:0D0680A8:asn1 rotinas de codificação:ASN1_CHECK_TLEN:tag errada [erro] Erro da 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 tem 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 Parece não funcionar:
>> openssl x509 -noout -text -in domain.com.crt não foi possível carregar o certificado 16851:erro:0906D06C:rotinas PEM:PEM_read_bio:sem linha inicial:pem_lib.c:650:Esperando: TRUSTED CERTIFICATE
Também >>
>> openssl x509 -text -inform PEM -in domain.com.crt não foi possível carregar o certificado 21321:erro:0906D06C:rotinas PEM:PEM_read_bio:sem linha inicial:pem_lib.c:650:Esperando: TRUSTED CERTIFICATE
>> openssl x509 -text -inform DER -in domain.com.crt não foi possível carregar o certificado 21325:erro:0D0680A8:rotinas de codificação asn1:ASN1_CHECK_TLEN:tag errada: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>> (A propósito, parabéns pela ajuda)
>> grep '^-----' domínio.com.crt -----INICIAR CERTIFICADO----- -----FIM DO CERTIFICADO-----
Acabei de enviar um email para a empresa que forneceu o Certificado, eles responderam>
Verifiquei o arquivo CSR que você forneceu e posso garantir que ele 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 domínio.com.crt em 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
É possível que as linhas sejam terminadas em ^M? Este é um problema potencial ao mover arquivos do Windows para sistemas UNIX. Uma maneira fácil de verificar é usar
vi
o modo "mostre-me o binário", comvi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
.Se cada linha terminar com um control-M, assim
você tem um arquivo no formato terminado em linha do Windows, e o apache não os ama.
Suas opções incluem mover o arquivo novamente, tomando mais cuidado; ou usando o
dos2unix
comando para retirá-los; você também pode removê-los dentro do vi, se tiver cuidado.Edit : obrigado a @dave_thompson_085, que aponta que essa 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 isso, outros erros de formatação, vários exemplos diferentes dos quais aparecem nos comentários, ainda podem causar problemas; verifique cuidadosamente se o certificado foi movido entre sistemas.
Para qualquer pessoa que chegue 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 ereq
é para CSRs:vs
Suspeito que você tenha um problema com o formato do certificado.
Execute os dois comandos a seguir e nos dê a saída:
Apenas dei voltas e voltas em círculos sobre isso, e descobri que eu tinha os certificados do jeito errado - por exemplo
ao invés de:
Algo para verificar se você está recebendo este erro.
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 - por um caractere unicode especial ao longo do caminho.
Isso levou horas para diagnosticar e, no final, eu apenas adivinhei e editei o certificado no vi e excluí os caracteres "-" existentes e os redigitei.
Espero que isso ajude alguém.
No meu caso, 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 executando o seguinte guia útil: https://web.archive.org/web/20200103195255/https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt -vs-cer-vs-pem-certificates-and-how-to-convert-los .
EDITAR NOTA: A URL postada originalmente não está mais funcionando, mas incluída para completar: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem- certificados-e-como-convertê-los
tudo o que precisei fazer foi renomear meu .crt para .pem, e pronto! O guia indicou que os erros da pergunta do OP implicam que o arquivo de entrada já está formatado em PEM, portanto, tentar convertê-lo para .pem de um formato DER não pode ser feito e, na verdade, é desnecessário.
Certifique-se de que seu arquivo não tenha espaços à direita ou à esquerda no arquivo de certificado. Certifique-se cuidadosamente de que não haja espaços ou espaços em branco em seu arquivo de certificado, selecionando todo o texto e procurando espaços em branco em um editor somente de texto.
Verifique também se de fato todos os arquivos configurados existem e estão corretos.
Por exemplo: em seu outro post você diz que seu arquivo .key se chama meu domínio.com.crt enquanto na configuração do vhost você tem domínio.com.crt
Verifique novamente se todos os arquivos acima realmente existem e são válidos.
Se alguém tiver esse problema e seus logs de erro do apache disserem 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 havia apontado a chave para meu arquivo de certificado e o certificado para meu arquivo de chave. Este post me ajudou a descobrir o problema, mas eu queria apontá-lo como outro problema / solução em potencial.
No meu caso, tem a ver com a BOM estar presente no arquivo. Pode-se descartá-lo assim:
Não tenho certeza se sempre leva 3 bytes, então a melhor maneira deve ser:
Eu tive esse problema porque recebi o conteúdo de um arquivo .p7b no estilo IIS colado em um email. Ele tem as tags "-----BEGIN CERTIFICATE-----" e "-----END CERTIFICATE-----", assim como .pem, e o conteúdo usa uma codificação base64 semelhante. Eu converti para um arquivo *.pem assim:
Depois disso, o Apache 2.2 ficou feliz.