Перевод статьи: Certificate revocation lists
Автор: Джэми Нгуен (Jamie Nguyen)
Списки отозванных сертификатов (CRL) предоставляют список сертификатов, которые были отозваны. Приложение клиента, такое как веб-браузер, может использовать списки отозванных сертификатов для проверки подлинности сервера. Приложение сервера, такое как Apache или OpenVPN, могут использовать списки отозванных сертификатов для запрета доступа клиентам, которые утратили доверие.
Публикация списков отозванных сертификатов - это их размещение в публично доступном месте (например, http://example.com/intermediate.crl.pem). Сторонние потребители могут получить список отозванных сертификатов из этого места, чтобы проверить, были ли отозваны сертификаты, относящиеся к этому списку.
Замечание. Некоторые разработчики приложений считают списки отозванных сертификатов устаревшими и используют вместо них протокол интерактивного статуса сертификата (OCSP).
Когда удостоверяющий центр подписывает сертификат, обычно он добавляет в сертификат место расположения списка отозванных сертификатов. Добавьте опцию crlDistributionPoints в соответствующие разделы. В нашем случае нужно добавить опцию в раздел [server_cert].
[server_cert] # ... пропущено ... crlDistributionPoints = URI:http://example.com/intermediate.crl.pem
# cd /root/ca # openssl ca -config intermediate/openssl.cnf \ -gencrl -out intermediate/crl/intermediate.crl.pem
Замечание. Обратитесь к разделу ОПЦИИ CRL на странице руководства инструмента ca, чтобы получить более подробную информацию о создании списков отозванных сертификатов.
Проверить содержимое списков отозванных сертификатов можно при помощи инструмента crl.
# openssl crl -in intermediate/crl/intermediate.crl.pem -noout -text
Ещё нет отозванных сертификатов, поэтому вывод содержит "No Revoked Certificates".
Список отозванных сертификатов нужно регулярно пересоздавать. По умолчанию список отозванных сертификатов устаревает через 30 дней. Период устаревания управляется опцией default_crl_days в разделе [CA_default].
Рассмотрим пример. Алиса запустила веб-сервер Apache и у неё есть секретный каталог с фотографиями милых котиков. Алиса хочет предоставить доступ к этой коллекции своему другу - Бобу.
Боб создаёт приватный ключ и запрос на подпись сертификата (CSR).
$ cd /home/bob $ openssl genrsa -out bob@example.com.key.pem 2048 $ openssl req -new -key bob@example.com.key.pem \ -out bob@example.com.csr.pem You are about to be asked to enter information that will be incorporated # У вас будет запрошена информация, которая будет вставлена into your certificate request. # в ваш запрос сертификата. ----- Country Name (2 letter code) [XX]:US # Название страны (двухбуквенный код) [XX]:US State or Province Name []:California # Название штата или провинции []:Калифорния Locality Name []:San Francisco # Название местности []:Сан-Франциско Organization Name []:Bob Ltd # Название организации []:ООО Боб Organizational Unit Name []: # Название подразделения []: Common Name []:bob@example.com # Общее имя []:bob@example.com Email Address []: # Адрес электронной почты []:
Боб отправляет свой запрос на подпись сертификата Алисе, которая затем подписывает его.
# cd /root/ca # openssl ca -config intermediate/openssl.cnf \ -extensions usr_cert -notext -md sha256 \ -in intermediate/csr/bob@example.com.csr.pem \ -out intermediate/certs/bob@example.com.cert.pem Sign the certificate? [y/n]: y # Подписать сертификат? [д/н]: д 1 out of 1 certificate requests certified, commit? [y/n]: y # 1 из 1 запросов на сертификат подписано, подтвердить? [д/н]: д
Алиса проверяет, что этот сертификат действителен:
# openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \ intermediate/certs/bob@example.com.cert.pem bob@example.com.cert.pem: OK
В файле index.txt должна появиться новая запись.
V 160420124740Z 1001 unknown ... /CN=bob@example.com
Алиса отправляет Бобу подписанный сертификат. Боб устанавливает сертификат в свой веб-браузер и теперь ему доступны Алисины фотографии кошечек. Ура!
К сожалению, впоследствии Боб поместил Алисины фотографии кошечек на сайт Новости Хакеров, как будто это его фотографии, и приобрёл высокую популярность. Алиса обнаружила это и хочет немедленно отобрать у него доступ.
# cd /root/ca # openssl ca -config intermediate/openssl.cnf \ -revoke intermediate/certs/bob@example.com.cert.pem Enter pass phrase for intermediate.key.pem: secretpassword # Введите ключевую фразу для intermediate.key.pem: секретныйпароль Revoking Certificate 1001. # Отзывается сертификат 1001. Data Base Updated # База данных обновлена
Теперь в файле index.txt строчка, соответствующая сертификату Боба, начинается с символа R. Это означает, что сертификат был отозван.
R 160420124740Z 150411125310Z 1001 unknown ... /CN=bob@example.com
После отзыва сертификата Боба Алиса должна пересоздать список отозванных сертификатов.
Проверкой клиентских сертификатов обычно занимается приложение-сервер (например, Apache). Это приложение должно иметь локальный доступ к списку отозванных сертификатов.
В случае Алисы, она может добавить директиву SSLCARevocationPath в конфигурацию Apache и скопировать список отозванных сертификатов на веб-сервер. При следующем подключении Боба к веб-серверу, Apache проверит клиентский сертификат по списку отозванных сертификатов и запретит доступ.
Подобная директива crl-verify есть и в OpenVPN, так что доступ клиентам с отозванными сертификатами будет заблокирован.
Сертификаты сервера обычно проверяет приложение клиента (например, веб-браузер). Это приложение должно иметь удалённый доступ к списку отозванных сертификатов.
Если сертификат был подписан расширением, включающим crlDistributionPoints, то клиентское приложение может прочитать эту информацию и получить список отозванных сертификатов из указанного места.
Точки распространения списка отозванных сертификатов можно увидеть в информации о сертификате в разделе X509v3.
# openssl x509 -in cute-kitten-pictures.example.com.cert.pem -noout -text X509v3 CRL Distribution Points: # Точки распространения списка отозванных сертификатов X509v3 Full Name: # Полное имя URI:http://example.com/intermediate.crl.pem