mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
mod_ssl: Switch to using SSL_OP_NO_RENEGOTATION (where available) to
block client-initiated renegotiation with TLSv1.2 and earlier. * modules/ssl/ssl_private.h: Define modssl_reneg_state enum, modssl_set_reneg_state function. * modules/ssl/ssl_engine_io.c (bio_filter_out_write, bio_filter_in_read): #ifdef-out reneg protection if SSL_OP_NO_RENEGOTATION is defined. * modules/ssl/ssl_engine_init.c (ssl_init_ctx_protocol): Enable SSL_OP_NO_RENEGOTATION. (ssl_init_ctx_callbacks): Only enable the "info" callback if debug-level logging *or* OpenSSL doesn't support SSL_OP_NO_RENEGOTATION. * modules/ssl/ssl_engine_kernel.c (ssl_hook_Access_classic): Use modssl_set_reneg_state to set the reneg protection mode. (ssl_hook_Access_modern): Drop manipulation of the reneg mode which does nothing for TLSv1.3 already. (ssl_callback_Info): Only enable reneg protection if SSL_OP_NO_RENEGOTATION is *not* defined. * modules/ssl/ssl_util_ssl.c (modssl_set_reneg_state): New function. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1877397 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -511,3 +511,19 @@ char *modssl_SSL_SESSION_id2sz(IDCONST unsigned char *id, int idlen,
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
void modssl_set_reneg_state(SSLConnRec *sslconn, modssl_reneg_state state)
|
||||
{
|
||||
#ifdef SSL_OP_NO_RENEGOTATION
|
||||
switch (state) {
|
||||
case RENEG_ALLOW:
|
||||
SSL_clear_options(sslconn->ssl, SSL_OP_NO_RENEGOTATION);
|
||||
break;
|
||||
default:
|
||||
SSL_set_options(sslconn->ssl, SSL_OP_NO_RENEGOTATION);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
sslconn->reneg_state = state;
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user