Аннулирование сертификатов

Последнее обновление: | Вся документация

Внимание! Английская версия сайта была обновлена, перевод неактуален () Просмотреть на английском

Когда закрытый ключ, соответствующий сертификату, становится небезопасным, вы должны аннулировать сертификат. Это может произойти по нескольким причинам. Например, вы можете случайно выложить закрытый ключ на общедоступный сервер; хакеры получат доступ к вашему закрытому ключу на сервере; хакеры получат временный контроль над вашими серверами или DNS-конфигурацией и используют это, чтобы подтвердить и выпустить сертификат с помощью вашего открытого ключа.

Когда вы аннулируете сертификат Let’s Encrypt, информация об этом публикуется в Online Certificate Status Protocol (OCSP). Некоторые браузеры проверяют OCSP, чтобы определить, можно ли доверять сертификату. Обратите внимание, что OCSP имеет несколько значительных проблем, поэтому не все браузеры проводят эту проверку. Но аннулирование сертификатов, соответствующих скомпрометированным закрытым ключам, все еще является важной практикой и необходима согласно Клиентскому соглашению Let’s Encrypt.

Чтобы аннулировать сертификат с помощью Let’s Encrypt, следует использовать ACME API, лучше всего через ACME-клиент, например, Certbot. Нужно подтвердить Let’s Encrypt, что вы имеете право на аннулирование сертификата. Есть три способа сделать это:

С аккаунта, который выпустил сертификат

Если изначально вы выпустили этот сертификат и все еще имеете контроль над аккаунтом, который использовали для выпуска, можно аннулировать его с помощью учетных данных аккаунта. Certbot попытается сделать это по умолчанию. Например:

certbot revoke --cert-path /etc/letsencrypt/archive/${YOUR_DOMAIN}/cert1.pem --reason keycompromise

Используя закрытый ключ сертификата

Если сертификат изначально был выпущен не вами, но у вас есть копия соответствующего закрытого ключа, можно аннулировать сертификат, используя этот ключ для подписи запроса на аннулирование. Допустим, если вы обнаружили, что закрытый ключ случайно попал в общий доступ, этот метод подойдет для аннулирования соответствующего сертификата, даже если его выпустили не вы.

Чтобы использовать этот метод, нужно сперва скачать сертификат, который требуется аннулировать. Let’s Encrypt сохраняет все сертификаты в логах системы Certificate Transparency, так что можно найти и скачать сертификаты с помощью монитора логов, например, crt.sh.

Вам также понадобится копия закрытого ключа в PEM-формате. Имея ее, можно аннулировать сертификат подобным образом:

certbot revoke --cert-path /PATH/TO/cert.pem --key-path /PATH/TO/key.pem --reason keycompromise

Используя разные авторизованные аккаунты

Если кто-то выпустил сертификат после компрометации вашего хоста или DNS, вы захотите аннулировать его сразу по возвращении контроля. Чтобы аннулировать такой сертификат, Let’s Encrypt нужно убедиться, что вы контролируете доменные имена в этом сертификате (иначе сторонние люди смогли бы аннулировать чужие сертификаты без разрешения)! Для подтверждения этого контроля Let’s Encrypt использует те же методы, что и для подтверждения контроля при выпуске: вы можете поместить некое значение в запись DNS TXT, разместить файл на HTTP-сервере, или предложить специальный TLS-сертификат. Обычно ACME-клиент сделает это за вас. Обратите внимание, что большинство ACME-клиентов совмещают подтверждение и выпуск; таким образом, единственный способ запросить подтверждение – это попытка выпуска сертификата. Вы можете впоследствии аннулировать полученный сертификат, если он вам не требуется, либо просто уничтожить закрытый ключ. Если все же хочется избежать выпуска сертификата, можно включить несуществующее доменное имя в команду запуска, что приведет к ошибке выпуска, при этом другое, существующее доменное имя будет подтверждено. Для этого сделайте следующее:

certbot certonly --manual --preferred-challenges=dns -d ${YOUR_DOMAIN} -d nonexistent.${YOUR_DOMAIN}

Далее следуйте инструкциям. Если вы предпочитаете подтверждать с использованием HTTP, а не DNS, замените флаг --preferred-challenges на --preferred-challenges=http.

Как только вы подтвердите контроль над всеми доменными именами в сертификате, который нужно аннулировать, можно скачать сертификат с crt.sh, после чего продолжить процесс аннулирования, как если бы его выпустили вы:

certbot revoke --cert-path /PATH/TO/downloaded-cert.pem --reason keycompromise