blog-img

Pra realizar a instalação do certificado será necessário seguir os seguintes passos:

  1. Gerar a chave para criação do certificado para isso basta rodar o comando openssl req -new -newkey rsa:2048 -nodes -keyout meudominio.com.key -out meudominio.com.csr
    1. Nesta etapa será necessário ter as seguintes informações:
      1. Será pedido uma senha (opcional), caso seja adicionada deve ser guardada para utilizar sempre que precisar revalidar;
      2. O código do País com duas letras;
      3. Nome do estado;
      4. Nome da cidade;
      5. Nome da organização/instituição;
      6. Nome da unidade da organização/instituição;
      7. Common Name; (Esse é o campo mais importante onde se deve colocar o nome ou o IP do seu servidor/domínio);
      8. Endereço de e-mail;
      9. Outros atributos extras opcionais;
  2. Caso deseje um certificado auto-assinado execute o seguinte comando:
    1. openssl x509 -req -in nomedachave.csr -days 365 -signkey meudominio.com.key -out meudominio.com.crt
  3. Caso seja criado um certificado em uma organização certificadora, basta enviar ou copiar o conteúdo do arquivo “meudominio.com.key”.
  4. Feito o passo 3 ou o passo 4 serão gerados dois arquivos certificado.crt e um bandle.crt.
  5. Execute o comando cat certificado.crt bandle.crt > meudominio.com.crt
  6. Configurando o nginx:
    1. Editar o arquivo /etc/nginx/sites-enabled/meudominio.com
    2. Adicionar as seguintes linhas dentro de server:
      1. listen      443 ssl;
      2. listen      [::]:443 ssl;
      3. server_name meudominio.com www.meudominio.com;
      4. ssl_certificate     /etc/ssl/certs/meudominio.com.crt;
      5. ssl_certificate_key /etc/ssl/certs/meudominio.com.key;
      6. ssl_prefer_server_ciphers on;
      7. ssl_protocols       TLSv1.2;
      8. ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
  7. Agora basta reiniciar o servidor nginx usando o comando sudo /etc/init.d/nginx restart

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

Blog realcionados

Fique por dentro de nossas novidades

Receba postagens sobre as tecnologias mais utilizadas do mercado.