Имитация отзыва сертификата
На этом шаге вы узнаете, как отозвать сертификат. Отзыв — это критически важный процесс, который применяется, когда закрытый ключ сертификата скомпрометирован или сертификат больше не нужен до истечения его естественного срока действия. Управление этим осуществляется с помощью Списка Отозванных Сертификатов (CRL — Certificate Revocation List).
CRL — это цифрово подписанный список, выпущенный CA, который содержит серийные номера всех отозванных им сертификатов. Клиенты могут загрузить CRL, чтобы проверить, является ли полученный ими сертификат все еще действительным.
Для управления отзывом openssl нуждается в небольшом конфигурационном файле, чтобы знать, где искать файлы базы данных CA (index.txt и serial). Скрипт настройки для этой лаборатории уже создал необходимый каталог (my-ca) и файлы. Теперь создайте конфигурационный файл.
Используйте команду cat для создания my-ca.conf:
cat << EOF > my-ca.conf
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./my-ca
database = \$dir/index.txt
serial = \$dir/serial
private_key = ca.key
certificate = ca.pem
default_md = sha256
policy = policy_anything
crl_extensions = crl_ext
default_crl_days = 30
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ crl_ext ]
authorityKeyIdentifier=keyid:always
EOF
Этот конфигурационный файл сообщает OpenSSL, как работать в качестве Центра Сертификации (CA). Вот что делает каждый раздел:
default_ca = CA_default: Указывает на основной раздел конфигурации CA.
dir = ./my-ca: Рабочий каталог CA для файлов базы данных.
database = $dir/index.txt: База данных сертификатов (отслеживает выданные/отозванные сертификаты).
serial = $dir/serial: Файл серийного номера для уникальных идентификаторов сертификатов.
private_key = ca.key: Закрытый ключ CA для подписи сертификатов.
certificate = ca.pem: Собственный сертификат CA.
default_md = sha256: Алгоритм хеширования для подписей (SHA-256).
policy = policy_anything: Правила проверки сертификатов.
crl_extensions = crl_ext: Опции форматирования CRL.
default_crl_days = 30: Срок действия CRL (30 дней).
countryName = optional: Код страны.
stateOrProvinceName = optional: Штат/провинция.
localityName = optional: Город/местоположение.
organizationName = optional: Название организации.
organizationalUnitName = optional: Отдел.
commonName = supplied: Доменное имя/имя сервера (требуется).
emailAddress = optional: Адрес электронной почты.
authorityKeyIdentifier=keyid:always: Включает идентификатор CA в CRL для проверки.
Этот конфигурационный файл является "руководством по эксплуатации" для вашего CA. Он указывает OpenSSL, где искать ключи, как хранить сертификаты и какие правила следовать при выпуске и отзыве сертификатов.
Теперь отзовем сертификат сервера (server.crt). Эта команда найдет серийный номер сертификата и пометит его как отозванный в файле базы данных index.txt.
openssl ca -config my-ca.conf -revoke server.crt
Вы увидите вывод, подтверждающий отзыв.
После отзыва необходимо сгенерировать и опубликовать обновленный CRL.
openssl ca -config my-ca.conf -gencrl -out my-ca.crl
Это создает файл my-ca.crl, который содержит список отозванных сертификатов.
Наконец, давайте снова попытаемся проверить сертификат сервера, но на этот раз мы также предоставим CRL. Правильный процесс проверки должен включать проверку на отзыв.
openssl verify -CAfile ca.pem -CRLfile my-ca.crl -crl_check server.crt
Теперь команда завершается неудачей с четким сообщением:
C = US, ST = California, L = MountainView, O = MyWebServer, CN = example.com
error 23 at 0 depth lookup: certificate revoked
error server.crt: verification failed
Ошибка "certificate revoked" (сертификат отозван) подтверждает, что наш процесс отзыва прошел успешно. Клиент, проверяя CRL, правильно определил, что сертификат для example.com больше не является надежным.