@@ -138,6 +138,7 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p)
138138 mctx -> auth .cipher_suite = NULL ;
139139 mctx -> auth .verify_depth = UNSET ;
140140 mctx -> auth .verify_mode = SSL_CVERIFY_UNSET ;
141+ mctx -> auth .verify_client_eku = SSL_VERIFY_EKU_UNSET ;
141142 mctx -> auth .tls13_ciphers = NULL ;
142143
143144 mctx -> ocsp_mask = UNSET ;
@@ -284,6 +285,7 @@ static void modssl_ctx_cfg_merge(apr_pool_t *p,
284285 cfgMergeString (auth .cipher_suite );
285286 cfgMergeInt (auth .verify_depth );
286287 cfgMerge (auth .verify_mode , SSL_CVERIFY_UNSET );
288+ cfgMerge (auth .verify_client_eku , SSL_VERIFY_EKU_UNSET );
287289 cfgMergeString (auth .tls13_ciphers );
288290
289291 cfgMergeInt (ocsp_mask );
@@ -405,6 +407,7 @@ void *ssl_config_perdir_create(apr_pool_t *p, char *dir)
405407
406408 dc -> szCipherSuite = NULL ;
407409 dc -> nVerifyClient = SSL_CVERIFY_UNSET ;
410+ dc -> nVerifyClientEKU = SSL_VERIFY_EKU_UNSET ;
408411 dc -> nVerifyDepth = UNSET ;
409412
410413 dc -> szUserName = NULL ;
@@ -461,6 +464,7 @@ void *ssl_config_perdir_merge(apr_pool_t *p, void *basev, void *addv)
461464
462465 cfgMergeString (szCipherSuite );
463466 cfgMerge (nVerifyClient , SSL_CVERIFY_UNSET );
467+ cfgMerge (nVerifyClientEKU , SSL_VERIFY_EKU_UNSET );
464468 cfgMergeInt (nVerifyDepth );
465469
466470 cfgMergeString (szUserName );
@@ -1321,6 +1325,36 @@ const char *ssl_cmd_SSLVerifyClient(cmd_parms *cmd,
13211325 return NULL ;
13221326}
13231327
1328+ const char * ssl_cmd_SSLVerifyClientEKU (cmd_parms * cmd ,
1329+ void * dcfg ,
1330+ const char * arg )
1331+ {
1332+ SSLDirConfigRec * dc = (SSLDirConfigRec * )dcfg ;
1333+ SSLSrvConfigRec * sc = mySrvConfig (cmd -> server );
1334+ ssl_verify_eku_t mode ;
1335+
1336+ if (strcEQ (arg , "on" )) {
1337+ mode = SSL_VERIFY_EKU_UNSET ;
1338+ }
1339+ else if (strcEQ (arg , "off" )) {
1340+ mode = SSL_VERIFY_EKU_OFF ;
1341+ }
1342+ else {
1343+ return apr_pstrcat (cmd -> temp_pool , cmd -> cmd -> name ,
1344+ ": Invalid argument '" , arg ,
1345+ "' (expected 'on' or 'off')" , NULL );
1346+ }
1347+
1348+ if (cmd -> path ) {
1349+ dc -> nVerifyClientEKU = mode ;
1350+ }
1351+ else {
1352+ sc -> server -> auth .verify_client_eku = mode ;
1353+ }
1354+
1355+ return NULL ;
1356+ }
1357+
13241358static const char * ssl_cmd_verify_depth_parse (cmd_parms * parms ,
13251359 const char * arg ,
13261360 int * depth )
@@ -2622,6 +2656,9 @@ static void modssl_auth_ctx_dump(modssl_auth_ctx_t *auth, apr_pool_t *p, int pro
26222656 }
26232657#endif
26242658 DMP_VERIFY (proxy ? "SSLProxyVerify" : "SSLVerifyClient" , auth -> verify_mode );
2659+ if (!proxy ) {
2660+ DMP_ON_OFF ("SSLVerifyClientEKU" , auth -> verify_client_eku );
2661+ }
26252662 DMP_LONG ( proxy ? "SSLProxyVerify" : "SSLVerifyDepth" , auth -> verify_depth );
26262663 DMP_STRING (proxy ? "SSLProxyCACertificateFile" : "SSLCACertificateFile" , auth -> ca_cert_file );
26272664 DMP_STRING (proxy ? "SSLProxyCACertificatePath" : "SSLCACertificatePath" , auth -> ca_cert_path );
0 commit comments