Recientemente me encontré con un problema relacionado en cert_exists() mientras investigaba la reutilización de certificados de Let’s Encrypt.
En mi caso, los archivos de certificado y ambos directorios RSA/ECDSA estaban presentes, pero la verificación actual seguía devolviendo falso porque openssl x509 -in ca.cer solo conserva el primer certificado del paquete de emisor.
Usar:
openssl verify -untrusted ca.cer fullchain.cer
corrigió la verificación. También lo probé con certificados RSA y ECDSA reales y completé una reconstrucción que reutilizó ambos certificados existentes sin provocar una reemisión forzada.
Es posible que esta no sea la misma causa raíz que el directorio _ecc ausente descrito en este tema, pero afecta la misma ruta de cert_exists(), por lo que lo vinculo aquí por si resulta útil para alguien que se enfrente a síntomas similares.
Informe: Let's Encrypt cert_exists() truncates the CA chain, causing forced reissuance and rate-limit failures
PR: FIX: preserve the Let's Encrypt issuer chain in cert_exists - Pull Request #1136 - discourse/discourse_docker - GitHub