Clarify in ssl.h documentation not to use the verify callback Change-Id: I54195f3fabbed788d3cf299d478d5151acfe2a4f Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/58929 Commit-Queue: David Benjamin <davidben@google.com> Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h index da78d1a..0a1493d 100644 --- a/include/openssl/ssl.h +++ b/include/openssl/ssl.h
@@ -2410,21 +2410,51 @@ // SSL_CTX_set_verify configures certificate verification behavior. |mode| is // one of the |SSL_VERIFY_*| values defined above. |callback|, if not NULL, is -// used to customize certificate verification. See the behavior of -// |X509_STORE_CTX_set_verify_cb|. +// used to customize certificate verification, but is deprecated. See +// |X509_STORE_CTX_set_verify_cb| for details. // // The callback may use |SSL_get_ex_data_X509_STORE_CTX_idx| with // |X509_STORE_CTX_get_ex_data| to look up the |SSL| from |store_ctx|. +// +// WARNING: |callback| should be NULL. This callback does not replace the +// default certificate verification process and is, instead, called multiple +// times in the course of that process. It is very difficult to implement this +// callback safely, without inadvertently relying on implementation details or +// making incorrect assumptions about when the callback is called. +// +// Instead, use |SSL_CTX_set_custom_verify| or +// |SSL_CTX_set_cert_verify_callback| to customize certificate verification. +// Those callbacks can inspect the peer-sent chain, call |X509_verify_cert| and +// inspect the result, or perform other operations more straightforwardly. +// +// TODO(crbug.com/boringssl/426): We cite |X509_STORE_CTX_set_verify_cb| but +// haven't documented it yet. Later that will have a more detailed warning about +// why one should not use this callback. OPENSSL_EXPORT void SSL_CTX_set_verify( SSL_CTX *ctx, int mode, int (*callback)(int ok, X509_STORE_CTX *store_ctx)); // SSL_set_verify configures certificate verification behavior. |mode| is one of // the |SSL_VERIFY_*| values defined above. |callback|, if not NULL, is used to -// customize certificate verification. See the behavior of +// customize certificate verification, but is deprecated. See the behavior of // |X509_STORE_CTX_set_verify_cb|. // // The callback may use |SSL_get_ex_data_X509_STORE_CTX_idx| with // |X509_STORE_CTX_get_ex_data| to look up the |SSL| from |store_ctx|. +// +// WARNING: |callback| should be NULL. This callback does not replace the +// default certificate verification process and is, instead, called multiple +// times in the course of that process. It is very difficult to implement this +// callback safely, without inadvertently relying on implementation details or +// making incorrect assumptions about when the callback is called. +// +// Instead, use |SSL_set_custom_verify| or |SSL_CTX_set_cert_verify_callback| to +// customize certificate verification. Those callbacks can inspect the peer-sent +// chain, call |X509_verify_cert| and inspect the result, or perform other +// operations more straightforwardly. +// +// TODO(crbug.com/boringssl/426): We cite |X509_STORE_CTX_set_verify_cb| but +// haven't documented it yet. Later that will have a more detailed warning about +// why one should not use this callback. OPENSSL_EXPORT void SSL_set_verify(SSL *ssl, int mode, int (*callback)(int ok, X509_STORE_CTX *store_ctx));