Проверка цепочки сертификатов в формате PKCS # 7 - PullRequest
0 голосов
/ 07 ноября 2018

Я извлек PKCS # 7, отформатированный в ASN1, и я хотел бы проверить его цепочку сертификатов (это означает, что каждый сертификат был надлежащим образом подписан указанным выше сертификатом от корня к листу).

В openssl есть следующий API:

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

Однако у меня нет доверенного хранилища сертификатов.

У меня есть отдельная функция, которая проверяет целостность корневого сертификата, и этого мне достаточно.

Если я уже доверяю корневому сертификату, зачем мне нужна структура сертификатов хранилища, чтобы убедиться, что цепочка подписана правильно?

спасибо

1 Ответ

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

Вопрос в том, зачем мне магазин для проверки правильности подписи?

Вам не обязательно нужен параметр хранилища, вы также можете установить его на NULL и просто проверить подпись, а не всю цепочку сертификатов. В этом случае вам следует использовать флаг PKCS7_NOVERIFY, как описано в руководстве для PKCS7_verify(). Однако, если вы также хотите проверить цепочку сертификатов, вам каким-то образом придется предоставить механизм, который сообщит OpenSSL, что вы доверяете корневому сертификату, и X509_STORE - это способ добиться этого.

Однако у меня нет доверенного хранилища сертификатов.

Из вашего вопроса не совсем понятно, в какой вы ситуации. Но вы пишете, что у вас есть отдельная функция для «проверки целостности корневого сертификата».

В этом случае вы можете создать экземпляр объекта X509_STORE с помощью X509_STORE_new() и добавить к нему доверенный сертификат. В дереве исходного кода OpenSSL есть пример этого в функции setup_verify () , который предназначен для случая, когда доверенный сертификат доступен в файле. Или вы можете использовать X509_STORE_add_cert () , если это лучше соответствует вашим целям. После того, как вы добавили этот доверенный сертификат, вы можете использовать хранилище в качестве параметра для вашего PKCS7_verify() вызова.

...