SSL_CTX_set_cert_verify_callback против SSL_CTX_set_verify

Может ли кто-нибудь сказать мне, в чем разница между SSL_CTX_set_cert_verify_callback и SSL_CTX_set_verify? Из документов OpenSSL:

SSL_CTX_set_cert_verify_callback() устанавливает функцию обратного вызова проверки для ctx. Объекты SSL, созданные из ctx, наследуют настройку, действующую на момент вызова SSL_new(3).

и:

SSL_CTX_set_verify() устанавливает флаги проверки для ctx в режим и указывает используемую функцию verify_callback. Если функция обратного вызова не должна быть указана, указатель NULL может использоваться для verify_callback.

Итак, я пытаюсь понять, какой обратный вызов отправлять для каждого из них (со стороны клиента).

Спасибо эксперты.


person BreakPoint    schedule 28.04.2010    source источник


Ответы (2)


SSL_CTX_set_cert_verify_callback() означает, что вы указываете функцию для выполнения всего процесса проверки (проходя по цепочке сертификатов, проверяя каждый сертификат по очереди). [вы, вероятно, не хотите этого делать, согласно предупреждению ниже]

SSL_CTX_set_verify(), с другой стороны, указывает функцию, которая вызывается, когда валидатор по умолчанию проверяет каждый сертификат, с preverify_ok, установленным на 0 или 1, чтобы указать, сработала ли проверка рассматриваемого сертификата.

Из документа для SSL_CTX_set_cert_verify_callback()

ПРЕДУПРЕЖДЕНИЯ

Не смешивайте обратный вызов проверки, описанный в этой функции, с функцией verify_callback, вызываемой в процессе проверки. Последний устанавливается с помощью семейства функций SSL_CTX_set_verify(3).

Предоставление полной процедуры проверки, включая настройки назначения сертификата и т. д., является сложной задачей. Встроенная процедура достаточно мощная, и в большинстве случаев достаточно изменить ее поведение с помощью функции verify_callback.

person David Gelhar    schedule 28.04.2010
comment
SSL_CTX_set_verify() вызывается только тогда, когда валидатор по умолчанию обнаруживает, что конкретный сертификат не прошел проверку? Так он будет вызываться только тогда, когда что-то не в порядке с сертификатом? - person BreakPoint; 28.04.2010
comment
Смотрите мой ответ. Он будет вызываться для сертификата клиента независимо от результата проверки. OpenSSL передает результат функции обратного вызова в аргументе preverify_ok. - person ZZ Coder; 28.04.2010
comment
Когда вы говорите, что он будет вызываться для сертификата клиента, вы имеете в виду только со стороны сервера? - person BreakPoint; 28.04.2010
comment
Да. Все это не имеет большого значения для вас, если вы клиент. - person ZZ Coder; 28.04.2010
comment
Спасибо... Еще несколько вопросов: 1. Выполняется ли проверка соответствия имени субъекта стандартной процедурой OpenSSL? 2. Где взять весь список проверок, которые выполняет этот механизм? 3. Есть ли способ отказаться от одного из них конкретно? (срок действия, цепочка доверия и т.д.) Если да - как? Спасибо еще раз! - person BreakPoint; 28.04.2010

SSL_CTX_set_cert_verify_callback() изменяет функцию проверки сертификата по умолчанию. Вам, вероятно, не следует этого делать. Это довольно сложно, вам нужно проверить подпись для каждого сертификата, проверить цепочку, возможно, проверить CRL. Это самая сложная часть SSL.

SSL_CTX_set_verify() используется для установки режима SSL. Если выбран режим SSL_VERIFY_PEER (двусторонний SSL), вы также должны установить обратный вызов в этой функции для дальнейшей проверки сертификата клиента (проверка CN по белому списку и т. д.). Для других режимов этот CB не используется. Поскольку вы сказали, что находитесь в клиентском режиме, вам, вероятно, не нужно беспокоиться об этом вызове.

person ZZ Coder    schedule 28.04.2010
comment
Спасибо за ответ. Проверяет ли проверка по умолчанию несоответствие имени субъекта? У меня есть пример реализации, который использует SSL_CTX_set_verify() для выполнения этой проверки. На стороне клиента. - person BreakPoint; 28.04.2010