J'ai besoin de configurer HAProxy avec deux certificats SSL différents
- www.example.com
- api.example.com
Maintenant, j'ai appris d'un article sur serverfault ( Configurer plusieurs certificats SSL dans Haproxy ) comment utiliser 2 certificats, mais le serveur continue d'utiliser le premier certificat mentionné pour les deux domaines.
Config:
frontend apache-https
bind 192.168.56.150:443 ssl crt /certs/crt1.pem crt /certs/cert2.pem
reqadd X-Forwarded-Proto:\ https
default_backend apache-http
backend apache-http
redirect scheme https if { hdr(Host) -i www.example.com } !{ ssl_fc }
redirect scheme https if { hdr(Host) -i api.example.com } !{ ssl_fc }
...
Comment dire à HAProxy quel certificat utiliser en fonction de l'URL?
Configuration complète:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
tune.ssl.default-dh-param 2048 // better with 2048 but more processor intensive
defaults
log global
mode http
option tcplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend apache-http
bind 0.0.0.0:80
mode http
option http-server-close # needed for forwardfor
option forwardfor # forward IP Address of client
reqadd X-Forwarded-Proto:\ http
default_backend apache-http
stats enable
frontend apache-https
bind 0.0.0.0:443 ssl crt cer1.pem cert2.pem
reqadd X-Forwarded-Proto:\ https
default_backend apache-http
backend apache-http
redirect scheme https if { hdr(Host) -i db.example.com } !{ ssl_fc }
redirect scheme https if { hdr(Host) -i api2.example.com } !{ ssl_fc }
balance roundrobin
cookie SERVERID insert indirect nocache
server www-1 10.0.0.101:80 cookie S1 check
server www-2 10.0.0.102:80 cookie S2 check
server www-3 10.0.0.103:80 cookie S3 check
ssl
ssl-certificate
haproxy
Merlin
la source
la source
crt
directives sur votrebind
ligne, mais dans la configuration complète, vous n'en avez qu'une ... Est-ce prévu? Ce certificat a-t-il des entrées SAN ou est-ce un caractère générique?Réponses:
Assurez-vous que vous exécutez HAProxy 1.6 ou supérieur
Cette question est un peu ancienne, mais j'ai rencontré exactement le même problème avec des configurations similaires à l'OP.
HAProxy 1.5 accepte la
crt
syntaxe multiple sur unebind
option; cependant, il utilise uniquement le premier certificat lors de la réponse.HAProxy 1.6 semble répondre avec le certificat basé sur la demande de l'appelant. Cela ne semble pas nécessiter de
sni
listes de contrôle d' accès spéciales dans la configuration.Voici un exemple qui fonctionne sur 1.6, mais ne parvient pas à utiliser
cert2.pem
lors de la réponse aux demandesplace2.com
sur 1.5:la source
Comment testez-vous le certificat présenté par haproxy? Si vous utilisez
openssl s_client
,-servername api.domain.com
sachez qu'il nécessite un paramètre supplémentaire ( ) pour envoyer les informations SNI dont haproxy a besoin pour décider quel certificat présenter.la source