Situation:

Je veux que cela fonctionne: les demandes proviennent des clients et vont à haproxy via le port 443 (ssl), puis elles doivent aller au backend sur le port 80.

J'ai un certificat de serveur donné par un intermédiaire ca (ca1), un certificat ca1 et un certificat client. MAIS je n'ai pas trouvé de solution pour demander le certificat de serveur correct de l'autorité de certification Windows au serveur haproxy (ubuntu). peut être la cause des modèles. J'ai demandé un certificat de serveur de machine Windows et je l'ai copié dans haproxy.

ET LE PROBLÈME EST HAProxy log a cette erreur "la chaîne de ca client ssl ne peut pas être vérifiée"

config haproxy :

frontend https_frontend

bind 192.168.14.167:443 ssl crt /etc/haproxy/cert/request/server.pem ca-file /etc/haproxy/cert/request/ca1-certificate.pem verify optional crt-ignore-err all no-sslv3

mode http

log /dev/log local7

option httplog

use_backend web_server_1 if { ssl_fc_has_crt }

default_backend web_server_2

backend web_server_1

mode http

option httplog

server w7 192.168.11.109:80 check

backend web_server_2

mode http

option httplog

server xp 192.168.13.205:80 check

ce schéma ne fonctionne pas.

informations supplémentaires: connectez-vous à partir de winXP, où j'ai exécuté opennssl

C:\OpenSSL-Win32\bin>openssl s_client -connect haproxy2:443 -cert client.pem -CAfile ca1-certificate.pem -state -showcerts

316:erreur:14094418:routines SSL:SSL3_READ_BYTES:alerte tlsv1 inconnue ca:.\ssl\s3_pkt.c:1275:alerte SSL numéro 48

316:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failed:.\ssl\s23_lib.c:184: ... cer info... Vérifiez le code de retour : 20 (impossible d'obtenir le certificat de l'émetteur local)

(désolé pour mon anglais s'il est mauvais) J'ai lu de nombreux articles à ce sujet mais je n'ai pas trouvé de solution.

answer

Les fichiers server.pem et client.pem devraient avoir 3 sections et devraient ressembler à ceci :

-----BEGIN RSA PRIVATE KEY-----
<lots of base64 encoded data>
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<lots of base64 encoded data>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<lots of base64 encoded data>
-----END CERTIFICATE-----

La clé privée n'est peut-être pas RSA, mais elle devrait être la première. Le premier certificat est le certificat de serveur signé. Le deuxième certificat doit être le certificat CA. Vous pouvez copier et coller chaque section à l'aide d'un éditeur de texte. Pour vérifier votre certificat, exécutez ceci.

$ openssl verify -CAfile ca1-certificate.pem server.pem
server.pem: OK