Je suis confronté à un problème lors de la configuration d'une instance HAProxy (v1.8.13) avec un support OpenSSL compilé pour accepter uniquement les certificats clients qui ont été signés par une certificat non-CA . En particulier, je veux utiliser un certificat intermédiaire (non auto-signé) comme ancre de confiance lors de la vérification des certificats des clients.
Voici la configuration que j'utilise :
frontend myfrontend
bind *:${PORT} ssl crt /certs/haproxy-server-cert-bundle.pem ca-file /certs/intermediate_cert2.pem verify required
Les clients se connectent via des certificats qui remplissent la chaîne de certificats suivante :
client certificate -> intermediate cert1 -> intermediate cert2 (this should become the new trust anchor) -> root CA certificate
Lorsque cette configuration est utilisée, la connexion au HAProxy via le certificat du client entraîne l'erreur suivante : Feb 13 09:17:26 my-forwarder haproxy[108]: <ip>:<port> [13/Feb/2019:09:17:26.619] my-forwarder/1: SSL client CA chain cannot be verified
Si je spécifie le certificat de l'autorité de certification racine comme ancre de confiance ( ca-file dans la configuration de HAProxy), la poignée de main TLS peut être établie avec succès. Cependant, je ne veux accepter que les certificats qui ont été signés par la branche des certificats. certificat intermédiaire 2 -> certificat de l'autorité de certification racine et non par i.e. un autre certificat intermédiaire -> certificat de l'autorité de certification racine .
J'ai essayé de reproduire ce comportement en utilisant simplement OpenSSL verify et via une configuration OpenSSL s_server/s_client. Il semble que le même problème existe en utilisant ces outils.
Quelques preuves :
$ openssl verify -CAfile test-certificate-chain.pem test-cert.pem test-cert.pem: C = ..., O = ..., OU = ..., ST = ..., CN = intermediate-cert2 error 2 at 2 depth lookup:unable to get issuer certificate
En ajoutant le certificat de l'autorité de certification racine à -CAfile, on obtient : $ openssl verify -CAfile <(cat test-certificate-chain.pem root-ca.pem) test-cert.pem test-cert.pem: OK
Les deux seules options que j'ai pu trouver pour résoudre ce problème sont les suivantes :
- Créez un certificat d'autorité de certification auto-signé qui signe le fichier certificat intermédiaire2 la clé publique du certificat. Le certificat d'autorité de certification auto-signé doit ensuite être installé dans le fichier de configuration HAProxy ca-file la clé de configuration.
- Configurer le HAProxy pour ignorer l'erreur OpenSSL numéro 2 (impossible d'obtenir le certificat de l'émetteur) via la clé de configuration du HAProxy ca-file /certs/intermediate_cert2.pem verify required ca-ignore-err 2
Je ne suis pas encore satisfait en termes de niveau de sécurité lorsque j'utilise l'une ou l'autre des options ci-dessus. Je serais donc curieux de savoir s'il existe une solution plus "propre" à ce problème.
Quelqu'un d'autre a-t-il été confronté à un problème similaire ?
Merci !