--- httpd-2.4.7/modules/ssl/ssl_engine_config.c.sslsninotreq +++ httpd-2.4.7/modules/ssl/ssl_engine_config.c @@ -55,6 +55,7 @@ SSLModConfigRec *ssl_config_global_creat mc = (SSLModConfigRec *)apr_palloc(pool, sizeof(*mc)); mc->pPool = pool; mc->bFixed = FALSE; + mc->sni_required = FALSE; /* * initialize per-module configuration --- httpd-2.4.7/modules/ssl/ssl_engine_init.c.sslsninotreq +++ httpd-2.4.7/modules/ssl/ssl_engine_init.c @@ -234,7 +234,7 @@ int ssl_init_Module(apr_pool_t *p, apr_p /* * Configuration consistency checks */ - ssl_init_CheckServers(base_server, ptemp); + ssl_init_CheckServers(mc, base_server, ptemp); /* * Announce mod_ssl and SSL library in HTTP Server field @@ -1322,7 +1322,7 @@ void ssl_init_ConfigureServer(server_rec } } -void ssl_init_CheckServers(server_rec *base_server, apr_pool_t *p) +void ssl_init_CheckServers(SSLModConfigRec *mc, server_rec *base_server, apr_pool_t *p) { server_rec *s, *ps; SSLSrvConfigRec *sc; @@ -1404,6 +1404,7 @@ void ssl_init_CheckServers(server_rec *b } if (conflict) { + mc->sni_required = TRUE; #ifndef HAVE_TLSEXT ap_log_error(APLOG_MARK, APLOG_WARNING, 0, base_server, APLOGNO(01917) "Init: You should not use name-based " --- httpd-2.4.7/modules/ssl/ssl_engine_kernel.c.sslsninotreq +++ httpd-2.4.7/modules/ssl/ssl_engine_kernel.c @@ -164,6 +164,7 @@ int ssl_hook_ReadReq(request_rec *r) } #ifdef HAVE_TLSEXT if ((servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))) { + if (myModConfig(r->server)->sni_required) { char *host, *scope_id; apr_port_t port; apr_status_t rv; @@ -205,6 +206,7 @@ int ssl_hook_ReadReq(request_rec *r) " virtual host"); return HTTP_FORBIDDEN; } + } #endif SSL_set_app_data2(ssl, r); --- httpd-2.4.7/modules/ssl/ssl_private.h.sslsninotreq +++ httpd-2.4.7/modules/ssl/ssl_private.h @@ -520,6 +520,7 @@ typedef struct { struct { void *pV1, *pV2, *pV3, *pV4, *pV5, *pV6, *pV7, *pV8, *pV9, *pV10; } rCtx; + BOOL sni_required; } SSLModConfigRec; /** Structure representing configured filenames for certs and keys for @@ -765,7 +766,7 @@ const char *ssl_cmd_SSLFIPS(cmd_parms *c int ssl_init_Module(apr_pool_t *, apr_pool_t *, apr_pool_t *, server_rec *); void ssl_init_Engine(server_rec *, apr_pool_t *); void ssl_init_ConfigureServer(server_rec *, apr_pool_t *, apr_pool_t *, SSLSrvConfigRec *); -void ssl_init_CheckServers(server_rec *, apr_pool_t *); +void ssl_init_CheckServers(SSLModConfigRec *mc, server_rec *, apr_pool_t *); STACK_OF(X509_NAME) *ssl_init_FindCAList(server_rec *, apr_pool_t *, const char *, const char *); void ssl_init_Child(apr_pool_t *, server_rec *);