Re: OpenSSL 1.1.1 vs 3.0 client cert verify "x509_strict" issues

2022-12-12 Thread Remi Tricot-Le Breton

Hello,

On 12/12/2022 16:45, Froehlich, Dominik wrote:


Hello HAproxy community!

We’ve recently updated from OpenSSL 1.1.1 to OpenSSL 3.0 for our 
HAproxy deployment.


We are now seeing some client certificates getting denied with these 
error messages:


“*SSL client CA chain cannot be verified”/“error:0A86:SSL 
routines::certificate verify failed*” 30/0A86


We found out that for this CA certificate, the error was

X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER

This error is only thrown if we run openssl verify with the 
“-x509_strict” option. The same call (even with the “-x509_strict” 
option) on OpenSSL 1.1.1 returned OK and verified.




Indeed, OpenSSL extended what the x509_strict option actually does in 
order to follow the requirements described in RFC 5280. OpenSSL's commit 
0e071fbce4 gives a detailed list of the extra checks performed when 
x509_strict is set.


As this was a bit surprising to us and we now have a customer who 
can’t use their client certificate anymore, we wanted to ask for some 
details on the OpenSSL verify check in HAproxy:


  * How does HAproxy call the “verify” command in OpenSSL?



Actual certificate and certificate chain verification is performed 
inside OpenSSL so any default behavior change in OpenSSL itself might 
have an impact on which certificate we reject or not.




  * Does HAproxy use the “x509_strict” option programmatically?
  * Is there a flag in HAproxy that would allow us to temporarily
disable the “strict” setting so that the customer has time to
update their PKI?



I did not try to reproduce the problem you encountered yet but you might 
have success with a proper crt-ignore-err and ca-ignore-err combination 
(on HAProxy's side). It does not disable strict checking per se but it 
could allow you to accept certificates that were otherwise rejected.




  * If there is no flag, we could temporarily patch out the code that
uses the flag, can you give us some pointers?

Thanks a lot for your help!

Dominik Froehlich, SAP



Hope this helps.

Rémi LB


OpenSSL 1.1.1 vs 3.0 client cert verify "x509_strict" issues

2022-12-12 Thread Froehlich, Dominik
Hello HAproxy community!

We’ve recently updated from OpenSSL 1.1.1 to OpenSSL 3.0 for our HAproxy 
deployment.

We are now seeing some client certificates getting denied with these error 
messages:

“SSL client CA chain cannot be verified”/“error:0A86:SSL 
routines::certificate verify failed” 30/0A86

We found out that for this CA certificate, the error was

X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER


This error is only thrown if we run openssl verify with the “-x509_strict” 
option. The same call (even with the “-x509_strict” option) on OpenSSL 1.1.1 
returned OK and verified.

As this was a bit surprising to us and we now have a customer who can’t use 
their client certificate anymore, we wanted to ask for some details on the 
OpenSSL verify check in HAproxy:


  *   How does HAproxy call the “verify” command in OpenSSL?
  *   Does HAproxy use the “x509_strict” option programmatically?
  *   Is there a flag in HAproxy that would allow us to temporarily disable the 
“strict” setting so that the customer has time to update their PKI?
  *   If there is no flag, we could temporarily patch out the code that uses 
the flag, can you give us some pointers?


Thanks a lot for your help!

Dominik Froehlich, SAP