Saya perlu mengkonfigurasi HAProxy dengan dua Sertifikat SSL yang berbeda
- www.example.com
- api.example.com
Sekarang saya belajar dari posting di serverfault ( Mengkonfigurasi beberapa sertifikat SSL di Haproxy ) cara menggunakan 2 sertifikat, namun server terus menggunakan sertifikat pertama yang disebutkan untuk kedua domain.
Konfigurasi:
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 }
...
Bagaimana cara memberitahu HAProxy sertifikat mana yang digunakan tergantung pada URL?
Konfigurasi penuh:
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
sumber
sumber
crt
arahan padabind
baris Anda , tetapi dalam konfigurasi penuh Anda hanya punya satu ... Apakah itu dimaksudkan? Apakah sertifikat itu memiliki entri SAN atau itu wildcard?Jawaban:
Pastikan Anda menjalankan HAProxy 1.6 atau lebih tinggi
Pertanyaan ini agak lama, tapi saya mengalami masalah yang sama persis dengan konfigurasi yang mirip dengan OP.
HAProxy 1.5 menerima beberapa
crt
sintaks pada suatubind
opsi; namun, ia hanya menggunakan sertifikat pertama saat merespons.HAProxy 1.6 muncul untuk merespons dengan sertifikat berdasarkan permintaan pemanggil. Tampaknya ini tidak memerlukan
sni
ACL khusus dalam konfigurasi.Berikut adalah contoh yang berfungsi pada 1.6, tetapi gagal digunakan
cert2.pem
ketika menanggapi permintaan untukplace2.com
pada 1.5:sumber
Bagaimana Anda menguji haproxy sertifikat yang disajikan? Jika Anda menggunakan
openssl s_client
, maklumi bahwa itu memerlukan parameter tambahan (-servername api.domain.com
) untuk mengirim informasi SNI yang haproxy perlu memutuskan sertifikat mana yang akan disajikan.sumber