Использование openssl для проверки отзыва корневого сертификата в PKCS # 7 - PullRequest
0 голосов
/ 21 ноября 2018

Вот подпись pkcs7_verify, взятая из библиотеки C / C ++:

int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
             BIO *indata, BIO *out, int flags);

Может использоваться с блоком PKCS7 (p7) и секцией, которую предполагается подписать (в данных).

Интересно, как эта проверка обнаруживает, был ли отозван один из сертификатов в цепочке ...

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

Я проверил аргументы функции и нашел один, представляющий список доверенных сертификатов хранилища.

Этот аргумент должен содержать сертификат, который является эмитентом самого нижнего сертификата в цепочке pkcs7.Таким образом, я предполагаю, что если этот сертификат помечен как отозванный, мы не пройдем проверку по revocation причине ...

Но что, если другой сертификат выше в цепочке будет отозван?как я могу предоставить эту информацию pkcs7_verify?

Или, возможно, есть другой метод openssl, который определяет, будет ли сертификат в цепочке аннулирован или нет?

ОБНОВЛЕНИЕ:

Я нашел альтернативный способ проверить, отозван ли сертификат.В приведенном ниже примере мы видим, что revoked_test.pem идентифицируется как отозванное путем сопоставления со списком в crl_chain.pem.Как я могу сделать это программно?

openssl verify -crl_check -CAfile crl_chain.pem revoked-test.pem 
revoked-test.pem: OU = Domain Control Validated, OU = PositiveSSL, CN = xs4all.nl
error 23 at 0 depth lookup:certificate revoked

спасибо

1 Ответ

0 голосов
/ 24 ноября 2018

Большинство правил проверки пути сертификации задано в структуре X509_STORE, которую вы передаете функции PKCS7_verify.

В этом примере показано, каксоздайте полный X509_STORE и объясните, как активировать проверку CRL в X509_STORE. (пример хорош для настройки проверки crl, но не для обработки цепочки сертификатов)

Основные функции:

  • X509_STORE_set_flags
  • X509_STORE_add_crl
  • X509_STORE_add_lookup

Вы используете X509_STORE_set_flags, чтобы сообщить хранилищу сертификатоввыполнить проверку CRL.Флаги, которые вам нужны: X509_V_FLAG_CRL_CHECK_ALL | X509_V_FLAG_CRL_CHECK.Вы можете найти все флаги здесь .

Вы используете X509_STORE_add_crl, чтобы добавить CRL для проверки.CRL не обязательно должен быть от корневого CA.

В качестве опции к X509_STORE_add_crl у вас есть X509_STORE_add_lookup, чтобы добавить функцию для поиска CRL в любом месте (например, файлsystem, database, urls и т. д.).

При выполнении проверки цепочки OpenSSl будет использовать CRL и функции поиска в X509_STORE для проверки всех сертификатов в цепочке.Если какой-либо сертификат в цепочке отозван, возвращается ошибка.

Важно добавить, что спецификация валидации пути сертификации X.509 не включает проверку якорей доверия (обычнокорневые сертификаты).Все сертификаты в цепочке под якорем доверия должны быть проверены, но якорь доверия является доверенным, потому что верификатор установил его так (т. Е. Валидация якоря доверия сделана за пределами допустимых значений верификатором).

...