В этой статье вы узнаете, как настроить SSL-терминацию на HAProxy для шифрования трафика через HTTPS. Мы будем использовать самозаверяющий сертификат SSL для нового интерфейса. Предполагается, что HAProxy уже установлен и настроен со стандартным HTTP-интерфейсом.
Требования
- Вультр VPS
- HAProxy 1.5
- Ubuntu 14.04 LTS (должна работать на других версиях и дистрибутивах)
Создать сертификат и закрытый ключ
Запустите следующие строки кода, чтобы сгенерировать закрытый ключ и самозаверяющий сертификат, который будет работать с HAProxy.
openssl genrsa -out /etc/ssl/private/server.key 2048
mkdir /etc/ssl/csr
openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/csr/server.csr
openssl x509 -req -days 365 -in /etc/ssl/csr/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/certs/server.crt
cat /etc/ssl/certs/server.crt /etc/ssl/private/server.key > /etc/ssl/certs/server.bundle.pem
Первое, что вы должны сделать, это убедиться, что SSLv3 отключен. Из-за атаки POODLE SSLv3 больше не считается безопасным. Все приложения и серверы должны использовать TLS 1.0 и выше. Используя ваш любимый текстовый редактор, откройте файл /etc/haproxy/haproxy.cfg
. Внутри ищите строку ssl-default-bind-options no-sslv3
под global
разделом. Если вы этого не видите, добавьте эту строку в конце раздела перед defaults
разделом. Это обеспечит глобальное отключение SSLv3. Вы также можете установить его в своих разделах веб-интерфейса, но рекомендуется отключить его глобально.
На настройку HTTPS. Создайте новый раздел внешнего интерфейса с именем web-https
.
frontend web-https
bind public_ip:443 ssl crt /etc/ssl/certs/server.bundle.pem
reqadd X-Forwarded-Proto:\ https
rspadd Strict-Transport-Security:\ max-age=31536000
default_backend www-backend
Объяснить:
bind public_ip:443
(измените public_ip
на ваш публичный IP-адрес VPS), чтобы HAProxy прослушал любой запрос, отправленный на IP-адрес порта 443
(порт HTTPS).
ssl crt /etc/ssl/certs/server.bundle.pem
говорит HAProxy использовать ранее созданный сертификат SSL.
reqadd X-Forwarded-Proto:\ https
добавляет заголовок HTTPS в конец входящего запроса.
rspadd Strict-Transport-Security:\ max-age=31536000
политика безопасности для предотвращения атак понижения.
Вам не нужно вносить какие-либо дополнительные изменения в ваш бэкэнд-раздел.
Если вы хотите, чтобы HAProxy по умолчанию использовал HTTPS, добавьте redirect scheme https if !{ ssl_fc }
в начало www-backend
раздела. Это заставит HTTPS перенаправить.
Сохраните вашу конфигурацию и запустите, service haproxy restart
чтобы перезапустить HAPRoxy. Теперь вы можете использовать HAProxy с конечной точкой SSL.