Недавно я столкнулся с связанной проблемой в cert_exists() при изучении повторного использования сертификатов Let’s Encrypt.
В моём случае файлы сертификатов и оба каталога RSA/ECDSA присутствовали, но текущая проверка всё равно возвращала false, потому что openssl x509 -in ca.cer сохраняет только первый сертификат из пакета издателя.
Использование:
openssl verify -untrusted ca.cer fullchain.cer
позволило исправить проверку. Я также протестировал это с реальными сертификатами RSA и ECDSA и выполнил пересборку, в ходе которой оба существующих сертификата были повторно использованы без запуска принудительного перевыпуска.
Это, возможно, не та же самая корневая причина, что и отсутствие каталога _ecc, описанное в этой теме, но это затрагивает тот же путь cert_exists(), поэтому я привязываю это здесь, на случай если это кому-то поможет при аналогичных симптомах.
Отчёт: 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