Saltar al contenido
ecdsa.com
Ruby openssl (Net::HTTP, Faraday, RubyGems)Ruby

Mensaje de error

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

También se muestra como

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

Mensaje completo: «SSL_connect returned=1 errno=0 peeraddr=<ip>:<port> state=error: certificate verify failed (certificate has expired)». Los certificados que aún no son válidos producen «(certificate is not yet valid)».

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

Qué significa

OpenSSL encontró en la cadena un certificado cuyo período de validez terminó antes de la hora actual del equipo que ejecuta Ruby. Lo más habitual es que el certificado del servidor no se renovara o que la renovación no se desplegara; en sistemas antiguos, un bundle de CA desactualizado puede hacer que OpenSSL construya la ruta a través de una raíz caducada.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Comprobar la fecha de fin del certificado servido

    Si ya pasó, renuévalo; si es correcta, revisa el bundle y el reloj del 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.

    Actualizar el bundle de CA del cliente

    Actualizar ca-certificates corrige los clientes que construyen rutas a través de certificados raíz retirados.

    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 y recargar el servidor

    Renueva el certificado y recarga el terminador TLS; comprueba el resultado desde el lado de la red.

    bash
    sudo certbot renew && sudo systemctl reload nginx

Errores relacionados

Explorar toda la base de datos de errores de firma