Openssl - Как проверить, отозван ли сертификат или нет - PullRequest
14 голосов
/ 26 мая 2010

С библиотекой OpenSSL, как проверить, аннулирован ли сертификат однорангового узла или нет. Из чего я погуглил:

  1. x509 cerfiticate содержит набор точек распространения crl, т.е. набор URL
  2. скачать crl с этих URL
  3. crl содержит серийные номера отозванных сертификатов
  4. если в списке crl есть серийный номер сертификата однорангового узла, он аннулируется

Какие API OpenSSL я использую для этого? Кроме того, это правильный способ проверить, отозван ли сертификат или нет?

Ответы [ 2 ]

16 голосов
/ 15 июня 2011

К сожалению, API проверки CRL в OpenSSL не очень высокоуровневый, поэтому у вас есть код, который выполняет много операций самостоятельно.

Для краткого обзора того, что нужно:

  • Извлечение URL-адреса CRL из сертификата для проверки из расширения точек распространения CRL. OpenSSL предоставляет функции парсинга сертификатов, но не имеет простого средства доступа к точкам распространения CRL
  • Скачать CRL с URL. OpenSSL не реализует ни это, ни какую-либо форму кеширования.
  • Проверка CRL (подпись, DN эмитента, срок действия, идентификатор ключа субъекта и т. Д.). OpenSSL предоставляет различные функции низкого уровня.
  • Убедитесь, что серийный номер сертификата для проверки указан в CRL.

Конечно, это следует делать после проверки того, что сам сертификат «действителен» в том смысле, что он выдан доверенным (или заслуживающим доверия) ЦС, у него есть правильные расширения использования и что он (вместе со своим доверием цепь) в течение срока действия. OpenSSL имеет несколько функций низкого и среднего уровня, чтобы помочь с этим.

Некоторые дополнительные детали, которые могут усложнить реализацию полностью общей реализации:

  • Некоторые сертификаты могут использовать OCSP вместо CRL.
  • Некоторые сертификаты имеют DN или URL-адреса LDAP в качестве точек распространения.
  • Некоторые CRL подписаны делегированным лицом, подписавшим CRL.
  • Дельта-CRL или разделенные CRL могут усложнить реализацию (особенно кеширование w.r.t.)
  • и т.д.

RFC 5280 описывает полный алгоритм проверки PKIX. Вам не нужно все реализовывать, но это хорошая справка, чтобы убедиться, что вы не забыли что-то важное. Вы должны посмотреть на модуль mod_ssl (содержащийся в сервере Apache httpd) для реализации, которая локально проверяет CRL и реализует проверку OCSP.

Если вы заранее знаете, каким ЦС вы доверяете (с точки зрения безопасности, это лучше), тогда вы можете получить задание cron, загружающее и обновляющее CRL. Это избавит вас от реализации части о поиске / загрузке / кэшировании CRL внутри вашей программы.

1 голос
/ 14 июня 2011

Проверить эту тему:

Теперь OpenSSL автоматически обрабатывает CRL (списки отзыва сертификатов)?

X509_STORE поддерживает обработку CRL. Вы можете извлечь CRL из сертификата X509 с помощью команды PEM_read_bio_X509_CRL, которая не описана в ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...