With the following config (note the SSLVerifyClient require inside the <Location "/"> block:
<VirtualHost x.x.x.x:443> SSLEngine on SSLVerifyDepth 5 SSLProtocol +TLSv1.2 +TLSv1.3 SSLCipherSuite HIGH:!DH:!DES:!SSLv2:!PSK:!SRP:!RC2:!RC4:!MD5:!LOW:!EXPORT:!eNULL:!aNULL SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256 SSLCertificateFile /usr/local/etc/ssl/certs/xxxxx.0 SSLCACertificatePath /usr/local/etc/ssl/ca SSLCACertificateFile /usr/local/etc/ssl/xxxxx.pem ErrorLog /var/log/httpd-ssl.log LogLevel debug <Location "/"> SSLVerifyClient require </Location> ... </VirtualHost> The web page load fails with 403 Forbidden and a message on the screen "Reason: Cannot perform Post-Handshake Authentication", and in the ssl debug log:
AH02041: Protocol: TLSv1.3, Cipher: TLS_AES_128_GCM_SHA256 (128/128 bits) AH02034: Initial (No.1) HTTPS request received for child 10 (server xxxx.com:443) AH10129: verify client post handshake AH10158: cannot perform post-handshake authentication SSL Library Error: error:0A000117:SSL routines::extension not received However if I remove the <Location "/"> and just put the SSLVerifyClient require directly in the <VirtualHost> block -- everything seems to work fine. This (I think) proves that the certs/ciphers are all ok.
I don't understand why it works this way and not the other, but I'm fine with it so long as doing this (omitting the <Location "/"> block) doesn't break something. I only have one host defined anyway so I'm wondering if the two scenarios are identical or if having <Location "/"> in a single-host setup makes some difference.