OpenSSL автоматически обрабатывает CRL (списки отзыва сертификатов) сейчас? - PullRequest
8 голосов
/ 08 декабря 2010

Справочник, из которого я работаю ( Сетевая безопасность с OpenSSL , Viega, Messier и Chandra), на странице 133, гласит:

[...] приложение должно загружать файлы CRL, чтобы процесс внутренней проверки гарантировал, что каждый сертификат, который он проверяет, не отозван.К сожалению, функция CRL в OpenSSL неполна в версии 0.9.6.Функции, необходимые для использования информации CRL, будут дополнены в новых версиях, начиная с 0.9.7.[...]

Я не могу найти никакой полезной информации об этом в документации OpenSSL (нет ничего удивительного).Мне кажется, что проверка CRL должна быть автоматической частью процесса проверки OpenSSL.Обрабатываются ли теперь списки отзыва сертификатов автоматически, или я все еще должен пройти через весь мусор, перечисленный в книге, чтобы тщательно проверить, что сертификат не был отозван?

Тесно связанный вопрос: загружает ли функция SSL_CTX_set_default_verify_pathsCRL пути тоже?

Ответы [ 2 ]

6 голосов
/ 23 июня 2011

Принятый ответ не совсем работает в libssl v0.9.8o.Хотя код соответствует этому в нижней части страницы в онлайн-документах на 2011/06/23:

http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html

Я использовал этот код:

X509_STORE *store = getStore();

// Enable CRL checking
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
X509_STORE_set1_param(store, param);
X509_VERIFY_PARAM_free(param);

Обратите внимание на использование X509_STORE вместо SSL_CTX для установки параметра.

РЕДАКТИРОВАТЬ: Еще одна вещь, которую следует отметить с OpenSSL и CRL.Если вы включите CRL для контекста, любой сертификат, у которого CA не имеет CRL, будет отклонен.Насколько я знаю, нет способа заставить OpenSSL применять CRL только к сертификатам из тех CA, которые перечислены в CRL, которые у него есть.

Я столкнулся с этой проблемой и потратил много времени, пытаясь выяснить,почему мой сертификат не был принят, когда он был совершенно действительным.Проблема заключалась в том, что я добавил CRL для одного CA, но не для другого.Все сертификаты от CA, которые не имели CRL, были отклонены.OpenSSL - это все или ничего в этом отношении.

6 голосов
/ 09 декабря 2010

SSL_CTX_set_default_verify_paths() просто загружает пути CA, а не CRL.

Я считаю (хотя я сам еще не реализовал это), что правильный процесс:

/* Load CRLs into the `X509_STORE` */

X509_STORE *x509_store = SSL_CTX_get_cert_store(ctx);
X509_STORE_add_crl(x509_store, crl);

/* Enable CRL checking */
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
SSL_CTX_set1_param(ctx, param);
X509_VERIFY_PARAM_free(param);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...