In Chrome, go to that protected URL and confirm that I am now blocked, as expected.
Convert PEM copy of certificate and private key to a pcks12 using openssl:
openssl pkcs12 -export -out cloudflare-mtls-client-cert.p12 -inkey cloudflare-mtls-client-key.pem -in cloudflare-mtls-client-cert.pem
Enter password for .p12 file when prompted
On Windows 10 machine, double-click the .p12 file > Certificate Import Wizard
Store Location: Current User
Enter password to import
Import options: Include all extended properties
Place all certificates in the following store: Personal
Open Google Chrome. Go to the protected URL
Continue to receive “Sorry, you have been blocked” from Cloudflare, even after Shift+F5 refresh.
Confirm that Chrome can see and has imported the certificate:
chrome://certificate-manager/clientcerts > View imported certificates from Windows > “Cloudflare” is the only one listed
Now confused what to try next, install the Cloudflare root certificate into trusted authorities:
CF dashboard > Zero Trust > Settings > Resources > Cloudflare certificates > Manage > there are 2 listed, select the one marked as “AVAILABLE” and “IN USE” > Download .crt
Double-click Cloudflare_CA.crt > Install certificate… > Store Location: Current User > Place all certificates in the following store: Trusted Root Certificate Authorities
Are you saying that even access my root domain https://dbarn.io/ should prompt for a certificate even if I don’t have a WAF rule set up to require one at that path? Have you tried accessing https://dbarn.io/protected/ ? That is the path with the mTLS rule.
This is what it shows in the Client Certificate section of my dashboard. Is there anything more I need to do?
You only get this prompt if you have a Client Certificate in your truststore. You can also see the page without one, except for test.laudian.de/mtls, for which I have created a block rule.
For dbarn.io/protected, I neither get a prompt nor am I blocked from entering the site.
Sorry, my WAF rule is dumb and actually matches against /protected/ so make sure you have the trailing slash when you try it.
Oh… ok. In that case, I’m not sure what can be learned by us testing against one another’s sites, if we don’t have Client Certificates for each other’s domains then we’re never going to see a prompt then, right? Or does this somehow help diagnose whether mTLS has been configured properly?
I thought I’d see the prompt anyway, but apparently I was wrong and the server actually gives a list of accepted certificate authorities, so I wouldn’t see the prompt for your site.
I can actually see that your page requests an mTLS cert via curl:
Are you maybe using a local firewall or something like that that might intercept the TLS handshake? What certificate do you see for your site in your browser?