Как уже упоминалось, вы можете использовать openssl verify
. Согласно documentation, он также проверяет срок действия.
Программно, это может означать часы поиска плохой (или отсутствующей) документации, чтения примеров кода во всем Интернете и, вероятно, головной боли.
Для правильной проверки сертификата необходимо сообщить все промежуточные сертификаты. Обычно вы также должны сообщать список аннулирования (CRL), но это не требуется.
Итак, вот что вам нужно сделать, с точки зрения кода (OpenSSL):
X509_STORE_new
- Создать хранилище сертификатов;
X509_STORE_CTX_new
- создать контекст магазина;
X509_STORE_add_cert
- Добавить сертификат CA (и все промежуточные) в доверенный список хранилища сертификатов (обратите внимание: есть функция для поиска/загрузки списка);
X509_STORE_add_crl
- Добавить отозванные сертификаты в CRL хранилища сертификатов (примечание: то же, что указано выше);
X509_STORE_CTX_init
- Инициализировать контекст вашего магазина, информируя ваше хранилище сертификатов;
X509_STORE_CTX_set_purpose
- Определите цель, если вам это необходимо;
X509_STORE_CTX_set_cert
- укажите контекст, сертификат которого вы собираетесь проверить;
X509_verify_cert
- Наконец, проверьте его;
X509_STORE_CTX_cleanup
- Если вы хотите повторно использовать контекст для проверки другого сертификата, вы его очищаете и возвращаете обратно (5);
- Последнее, но не менее важное: освободить (1) и (2);
В качестве альтернативы, быстрая проверка может быть выполнена с помощью X509_verify
. Однако имейте в виду, что он сравнивает только подписи.
Когда мне это было нужно, я провел день поиска, чтения и тестирования. Затем я понял, что все, что мне нужно, было правильным в исходном коде OpenSSL. Итак, если вам нужен пример, перейдите прямо к openssl-xxx/apps/verify.c.
ВАЖНО: НИКОГДА не используйте MD5. Чтобы понять причину, прочитайте Creating a rogue CA certificate.
Возможный дубликат [x509 проверка сертификата в C] (http://stackoverflow.com/questions/2756553/x509-certificate-verification-in-c) – jww