Pular para o conteúdo
ecdsa.com
Ruby openssl (Net::HTTP, Faraday, RubyGems)Ruby

Mensagem de erro

state=error: certificate verify failed (certificate has expired)

Também aparece como

  • OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=127.0.0.1:8443 state=error: certificate verify failed (certificate has expired)

Mensagem completa: “SSL_connect returned=1 errno=0 peeraddr=<ip>:<port> state=error: certificate verify failed (certificate has expired)”. Certificados que ainda não são válidos geram “(certificate is not yet valid)”.

Ruby openssl (Net::HTTP, Faraday, RubyGems) — OpenSSL::SSL::SSLError from SSL_connect

O que significa

O OpenSSL encontrou na cadeia um certificado cujo período de validade terminou antes da hora atual da máquina que roda o Ruby. Na maioria das vezes, o certificado do servidor não foi renovado ou a renovação não foi implantada; em sistemas antigos, um bundle de CAs desatualizado pode fazer o OpenSSL montar o caminho por uma raiz expirada.

Por que acontece

Como corrigir

  1. 1.

    Verificar a data de término do certificado servido

    Se ela já passou, renove; se estiver em ordem, examine o bundle e o relógio do cliente.

    bash
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \
      | openssl x509 -noout -subject -enddate
  2. 2.

    Atualizar o bundle de CAs do cliente

    Atualizar o ca-certificates corrige clientes que montam caminhos por raízes aposentadas.

    bash
    # Old images: refresh the CA bundle Ruby's OpenSSL uses
    apt-get update && apt-get install --only-upgrade -y ca-certificates
    ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
  3. 3.

    Renovar o certificado e recarregar o servidor

    Renove o certificado e recarregue o terminador TLS; confira o resultado de fora, pela rede.

    bash
    sudo certbot renew && sudo systemctl reload nginx

Erros relacionados

Ver toda a base de erros de assinatura