Pra realizar a instalação do certificado será necessário seguir os seguintes passos:
Ao configurar seus certificados SSL no Nginx, não é raro ver vários erros ao tentar recarregar sua configuração Nginx para ativar os Certificados SSL.
Este artigo descreve os seguintes tipos de erros:
PEM_read_bio_X509: ASN1_CHECK_TLEN:wrong tag error PEM_read_bio_X509_AUX: Expecting: TRUSTED CERTIFICATE SSL_CTX_use_PrivateKey_file: bad base64 decode error
A baixo pode visualizar todos os detalhes:
Nginx PEM_read_bio_X509: ASN1_CHECK_TLEN:wrong tag error
Estes tipos de erro aparecem quando o arquivo de certificado não é válido. O erro inteiro se parece com isto:
$ service nginx restart
nginx: [emerg] PEM_read_bio_X509("/etc/nginx/ssl/mydomain.tld/certificate.crt") failed (SSL: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:Type=X509_CINF error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:Field=cert_info, Type=X509 error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib)
Para corrigir isso, comece lendo as informações do certificado SSL via CLI. As possibilidades são que o OpenSSL também irá gerar um erro, confirmando que o seu certificado SSL não é válido.
No exemplo acima, o certificado SSL está em /etc/nginx/ssl/mydomain.tld/certificate.crt, então os exemplos a seguir continuarão a usar esse arquivo.
$ openssl x509 -text -noout -in /etc/nginx/ssl/mydomain.tld/certificate.crt
unable to load certificate
139894337988424:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:
Se essa é o seu retorno, está confirmado: o seu certificado SSL está corrompido. Existem caracteres ASCII não suportados, está faltando uma parte, algum erro na cópia enviando dados extras… Resumindo: o arquivo de certificado não irá funcionar.
Você pode testar algumas coisas por si próprio, como problemas com quebra de linhas (Linux vs. Windows continua sendo um problema). Abra o arquivo em modo binário no vi, e se você vir ^M no final de cada linha, você tem incorretamente o padrão Windows de quebra de linhas em vez do Unix.
$ vi -b /etc/nginx/ssl/mydomain.tld/certificate.crt
-----BEGIN CERTIFICATE-----^M
MIIFUjCCBDqgAwIBAgIKYsvzdQAAAAAAzTANBgkqhkiG9w0BAQUFADBOMQswCQYD^M
...
Remova todas as novas linhas e substitua-as por de linhas unix normais (\n em vez de \r\n).
Se o arquivo de certificado SSL contiver vários certificados, como intermediários ou certificados raiz CA (root), é importante verificar cada um deles separadamente. Você pode verificar isso pela contagem de linhas “—– BEGIN CERTIFICATE —–“ no arquivo.
Se você tem vários certificados, copie e cole cada um em arquivos diferentes e execute o exemplo openssl acima. Cada um deve dar uma resposta válida a partir do certificado SSL.
$ grep 'BEGIN CERTIFICATE' /etc/nginx/ssl/mydomain.tld/certificate.crt
-----BEGIN CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-----BEGIN CERTIFICATE-----
A saída acima mostra que o arquivo de Certificado SSL contém 3 certificados SSL individuais. Copie e cole todos em arquivos separados e verifique se eles funcionam. Se um deles retornar erros, corrija-os: encontre os caracteres ASCII inválidos, corrija as quebras de linha, verifique se você copiou e colou corretamente do original recebido etc.
O erro “nginx: [emerg] PEM_read_bio_X509” significa que sua configuração Nginx é provavelmente correta; é o arquivo de certificado SSL que não é válido.
Nginx PEM_read_bio_X509_AUX: Expecting: TRUSTED CERTIFICATE
Este é um erro que normalmente é resolvido muito rapidamente. O arquivo de certificado que você está chamando para sua configuração não é um arquivo de certificado. Pelo menos não de acordo com Nginx.
$ service nginx configtest
nginx: [emerg] PEM_read_bio_X509_AUX("/etc/nginx/ssl/mydomain.tld/certificate.crt") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: configuration file /etc/nginx/nginx.conf test failed
Isso pode acontecer se você tiver trocado acidentalmente sua chave privada e o certificado SSL em seus arquivos, ou na configuração Nginx.
Sua configuração Nginx irá conter este tipo de linhas para sua configuração SSL:
ssl_certificate /etc/nginx/ssl/mydomain.tld/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/mydomain.tld/certificate.key;
Verifique se o arquivo ssl_certificate é de fato o seu certificado SSL e se o ssl_certificate_key é de fato sua chave. Não é difícil misturar esses arquivos se você estiver com pressa ou distraído, e salvar o conteúdo errado no arquivo errado.
Nginx SSL_CTX_use_PrivateKey_file: bad base64 decode error
Outro erro comum em configurações Nginx é o seguinte.
$ service nginx configtest
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/mydomain.tld/certificate.key") failed (SSL: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
nginx: configuration file /etc/nginx/nginx.conf test failed
Observe como o erro do Nginx SSL aponta para o arquivo .key desta vez. O problema é com a chave SSL, e não o certificado SSL.
Este erro indica que a chave privada que você direcionou para sua configuração não coincide com o Certificado SSL.
Você pode validar se a chave privada e o certificado SSL coincidem, calculando a hash MD5. Se eles não corresponderem, você tem de encontrar ou o certificado ou a chave privada correta.
Um deles está errado e precisa ser substituído. Com este erro, é impossível saber qual está errado. Sua melhor aposta é ler as informações do certificado SSL, determinar se esse é o certificado SSL correto (verifique a data de validade, SANs, nome comum etc.), e encontre a chave correspondente (que deve ter sido criada quando você gerou o seu Certificate Signing Request, CSR).
Receba postagens sobre as tecnologias mais utilizadas do mercado.