diff --git a/library/x509_crt.c b/library/x509_crt.c index 7d2cff146..8cb19239e 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c @@ -2303,7 +2303,9 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, } exit: - /* prevent misuse of the vrfy callback */ + /* prevent misuse of the vrfy callback - VERIFY_FAILED would be ignored by + * the SSL module for authmode optional, but non-zero return from the + * callback means a fatal error so it shouldn't be ignored */ if( ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ) ret = MBEDTLS_ERR_X509_FATAL_ERROR; diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh index 9c9cf4651..6e8a61da4 100755 --- a/tests/ssl-opt.sh +++ b/tests/ssl-opt.sh @@ -1948,6 +1948,8 @@ run_test "Authentication: client no cert, ssl3" \ -C "! mbedtls_ssl_handshake returned" \ -S "X509 - Certificate verification failed" +# The "max_int chain" tests assume that MAX_INTERMEDIATE_CA is set to its +# default value (8) run_test "Authentication: server max_int chain, client default" \ "$P_SRV crt_file=data_files/dir-maxpath/c09.pem \ key_file=data_files/dir-maxpath/09.key" \