Сертификаты, SNI, OCSP stapling, TLS 1.3, cipher suites
SSL termination, сертификаты, SNI, OCSP stapling, TLS 1.3, cipher suites.
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/site.pem
default_backend web_serversТребования:
# Объединение сертификата и ключа
cat site.crt site.key > /etc/haproxy/certs/site.pem
# С правильными правами
chmod 600 /etc/haproxy/certs/site.pem
chown haproxy:haproxy /etc/haproxy/certs/site.pem# Полный chain: сертификат + intermediate + ключ
cat site.crt intermediate.crt root.crt site.key > /etc/haproxy/certs/site.pemПорядок важен:
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/
default_backend web_serversКак работает:
/etc/haproxy/certs/ файлы domain1.pem, domain2.pemfrontend https_front
# Wildcard сертификат для *.example.com
bind *:443 ssl crt /etc/haproxy/certs/wildcard.pem
# Отдельный сертификат для api.example.com
bind *:443 ssl crt /etc/haproxy/certs/api.pem
default_backend web_serversfrontend https_front
bind *:443 ssl crt /etc/haproxy/certs/site.pem ocsp /etc/haproxy/ocsp/site.der
default_backend web_serversПреимущества:
# Скрипт обновления (cron ежедневно)
#!/bin/bash
CERT=/etc/haproxy/certs/site.pem
OCSP=/etc/haproxy/ocsp/site.der
# Извлечь URL OCSP из сертификата
OCSP_URL=$(openssl x509 -in $CERT -noout -ocsp_uri)
# Получить OCSP ответ
openssl ocsp -issuer /etc/haproxy/certs/issuer.crt \
-cert $CERT \
-url $OCSP_URL \
-respout $OCSP
# Reload HAProxy
systemctl reload haproxyfrontend https_front
bind *:443 ssl crt /etc/haproxy/certs/site.pem alpn h2,http/1.1
# HAProxy автоматически получает и обновляет OCSP
default_backend web_serversfrontend https_front
bind *:443 ssl crt /etc/haproxy/certs/site.pem \
ssl-min-ver TLSv1.2 \
ssl-max-ver TLSv1.3
default_backend web_serversПараметры:
ssl-min-ver TLSv1.2 — запретить TLS 1.0/1.1ssl-max-ver TLSv1.3 — разрешить TLS 1.3frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/site.pem \
ssl-min-ver TLSv1.3
default_backend web_serversСовместимость:
global
ssl-default-bind-ciphers ECDHE+AESGCM:DHE+AESGCM:ECDHE+SHA256:DHE+SHA256
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256Параметры:
ssl-default-bind-ciphers — TLS 1.2 и нижеssl-default-bind-ciphersuites — TLS 1.3global
# TLS 1.2 cipher suites
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
# TLS 1.3 cipher suites
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
# Опции
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets# Проверка поддерживаемых cipher suites
openssl s_client -connect example.com:443 -cipher 'ECDHE+AESGCM'
# Проверка TLS 1.3
openssl s_client -connect example.com:443 -tls1_3global
ssl-default-bind-options no-tls-ticketsЗачем:
global
ssl-default-bind-options prefer-server-ciphersПоведение:
global
tune.ssl.lifetime 3600Параметр:
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/server.pem \
verify required ca-file /etc/haproxy/certs/ca.crt
default_backend web_serversПараметры:
verify required — требовать клиентский сертификатca-file — CA для проверки клиентских сертификатовfrontend https_front
bind *:443 ssl crt /etc/haproxy/certs/server.pem \
verify optional ca-file /etc/haproxy/certs/ca.crt
# ACL для клиентов с сертификатом
acl has_client_cert ssl_fc_client_verify
use_backend secure_servers if has_client_cert
default_backend web_serversbackend secure_servers
server web1 192.168.1.10:8443 ssl verify required ca-file /etc/haproxy/certs/ca.crt
server web2 192.168.1.11:8443 ssl verify required ca-file /etc/haproxy/certs/ca.crtПараметры:
ssl — использовать SSLverify required — проверять сертификат backendca-file — CA для проверкиbackend secure_servers
server web1 192.168.1.10:8443 ssl crt /etc/haproxy/certs/client.pem verify required ca-file /etc/haproxy/certs/ca.crtИспользование:
global
# Современные cipher suites
ssl-default-bind-ciphers ECDHE+AESGCM:DHE+AESGCM:ECDHE+SHA256:DHE+SHA256
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
# Безопасные опции
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets prefer-server-ciphers
# SSL session lifetime
tune.ssl.lifetime 3600
tune.ssl.default-dh-param 2048
frontend https_front
# SNI с несколькими сертификатами
bind *:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1.1
# OCSP stapling (автоматическое в HAProxy 2.1+)
# bind *:443 ssl crt /etc/haproxy/certs/site.pem ocsp /etc/haproxy/ocsp/site.der
# HTTP/2 только (опционально)
# http2
# Redirect HTTP → HTTPS
http-request redirect scheme https code 301 if !{ ssl_fc }
# HSTS header
http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Security headers
http-response set-header X-Frame-Options "SAMEORIGIN"
http-response set-header X-Content-Type-Options "nosniff"
http-response set-header X-XSS-Protection "1; mode=block"
default_backend web_servers
backend web_servers
# SSL к backend (если требуется)
# server web1 192.168.1.10:8443 ssl verify required ca-file /etc/haproxy/certs/ca.crt
server web1 192.168.1.10:8080 check
server web2 192.168.1.11:8080 check# Проверка PEM файла
openssl x509 -in /etc/haproxy/certs/site.pem -text -noout
# Проверка цепочки
openssl verify -CAfile /etc/haproxy/certs/ca.crt /etc/haproxy/certs/site.pem
# Проверка OCSP
openssl x509 -in /etc/haproxy/certs/site.pem -noout -ocsp_uri# Полная информация
openssl s_client -connect example.com:443 -servername example.com
# Проверка TLS 1.3
openssl s_client -connect example.com:443 -tls1_3
# Проверка cipher suite
openssl s_client -connect example.com:443 -cipher 'ECDHE+AESGCM'# Certificate expired
SSL error: certificate has expired
# Chain verification failed
SSL error: unable to verify the first certificate
# Cipher mismatch
SSL error: no shared cipher
# ✅ Хорошо
# - Использовать Let's Encrypt или доверенный CA
# - Автоматическое обновление (certbot cron)
# - Chain сертификатов в PEM файле
# ❌ Плохо
# - Self-signed сертификаты в production
# - Просроченные сертификаты
# - Неполный chain# ✅ Хорошо
ssl-min-ver TLSv1.2
no-tls-tickets
prefer-server-ciphers
# ❌ Плохо
# ssl-min-ver TLSv1.0 # Устарело
# ssl-max-ver TLSv1.2 # Нет TLS 1.3# ✅ Баланс безопасности и скорости
tune.ssl.lifetime 3600 # Session caching
tune.ssl.default-dh-param 2048
# ❌ Излишне параноидально
# tune.ssl.lifetime 60 # Частые handshake
# tune.ssl.default-dh-param 4096 # Медленный handshakeИзучим TCP mode и L4 балансировку для баз данных и кастомных протоколов.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.