Author: dsahlberg Date: Tue Jun 24 21:50:29 2025 New Revision: 1926705 URL: http://svn.apache.org/viewvc?rev=1926705&view=rev Log: Add a dedicated flag for server signature check failure.
This helps to detect for example a server certificate signed by an unsupported signature algorithm (as happens in for example Fedora 42 due to removal of the MD5 algorithm). * serf_bucket_types.h Add the SERF_SSL_SIGNATURE_FAILURE flag * buckets/ssl_buckets.c (validate_server_certificate): Return SERF_SSL_SIGNATURE_FAILURE in case of error verifying the CRL or Certificate signature. * test/test_ssl.c (format_cert_failures): Manage the SERF_SSL_SIGNATURE_FAILURE flag Patch by: Graham Leggett <minfrin> See GitHub PR #7 (second part) Modified: serf/trunk/buckets/ssl_buckets.c serf/trunk/serf_bucket_types.h serf/trunk/test/test_ssl.c Modified: serf/trunk/buckets/ssl_buckets.c URL: http://svn.apache.org/viewvc/serf/trunk/buckets/ssl_buckets.c?rev=1926705&r1=1926704&r2=1926705&view=diff ============================================================================== --- serf/trunk/buckets/ssl_buckets.c (original) +++ serf/trunk/buckets/ssl_buckets.c Tue Jun 24 21:50:29 2025 @@ -890,6 +890,10 @@ validate_server_certificate(int cert_val case X509_V_ERR_UNABLE_TO_GET_CRL: failures |= SERF_SSL_CERT_UNABLE_TO_GET_CRL; break; + case X509_V_ERR_CERT_SIGNATURE_FAILURE: + case X509_V_ERR_CRL_SIGNATURE_FAILURE: + failures |= SERF_SSL_SIGNATURE_FAILURE; + break; default: serf__log(LOGLVL_WARNING, LOGCOMP_SSL, __FILE__, ctx->config, Modified: serf/trunk/serf_bucket_types.h URL: http://svn.apache.org/viewvc/serf/trunk/serf_bucket_types.h?rev=1926705&r1=1926704&r2=1926705&view=diff ============================================================================== --- serf/trunk/serf_bucket_types.h (original) +++ serf/trunk/serf_bucket_types.h Tue Jun 24 21:50:29 2025 @@ -583,6 +583,8 @@ serf_bucket_t *serf_bucket_limit_create( #define SERF_SSL_OCSP_RESPONDER_ERROR 0x0200 #define SERF_SSL_OCSP_RESPONDER_UNKNOWN_FAILURE 0x0400 +#define SERF_SSL_SIGNATURE_FAILURE 0x0800 + extern const serf_bucket_type_t serf_bucket_type_ssl_encrypt; #define SERF_BUCKET_IS_SSL_ENCRYPT(b) SERF_BUCKET_CHECK((b), ssl_encrypt) Modified: serf/trunk/test/test_ssl.c URL: http://svn.apache.org/viewvc/serf/trunk/test/test_ssl.c?rev=1926705&r1=1926704&r2=1926705&view=diff ============================================================================== --- serf/trunk/test/test_ssl.c (original) +++ serf/trunk/test/test_ssl.c Tue Jun 24 21:50:29 2025 @@ -502,6 +502,11 @@ static const char *format_cert_failures( failures &= ~SERF_SSL_OCSP_RESPONDER_UNKNOWN_FAILURE; } + if (failures & SERF_SSL_SIGNATURE_FAILURE) { + str = apr_pstrcat(pool, str, *str ? "|" : "", "SIGNATURE_FAILURE", NULL); + failures &= ~SERF_SSL_SIGNATURE_FAILURE; + } + if (failures) { /* Unexpected or unknown cert failure. */ REPORT_TEST_SUITE_ERROR();