Проводится ли проверка сертификата во время вызова BIO_do_connect
?
Я пытаюсь понять, когда использовать ssl_get_verify_result()
. В документации сказано, что эту функцию следует использовать вместе с ssl_get_peer_certificate
. Но некоторые примеры (например, IBM ) не говорят, что OpenSSL выполняет проверку за нас. Они звонят ssl_get_verify_result()
только после BIO_do_connect
.
Я вижу, что BIO_do_connect
на самом деле является макросом:
/* BIO_s_accept() and BIO_s_connect() */
# define BIO_do_connect(b) BIO_do_handshake(b)
# define BIO_do_accept(b) BIO_do_handshake(b)
# endif /* OPENSSL_NO_SOCK */
# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
Итак, я понимаю, что BIO_do_connect
на самом деле не проверяет, отправил ли сервер сертификат. Если сервер отправляет сертификат, ssl_get_verify_result
будет использовать его для проверки. Если он не отправляет, то ssl_get_verify_result
все еще возвращает X509_V_OK
. Вот почему нам нужно позвонить ssl_get_peer_certificate
, чтобы убедиться, что сертификат действительно отправлен. Это правильно?