Para acesso com ssl é necessário configurar o haproxy para aceitar o certificado conforme abaixo:
frontend http-https
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/site.pem
redirect scheme https if !{ ssl_fc }
reqadd X-Forwarded-Proto:\ https <- Força o redirecionamento http para https
use_backend WWW if { ssl_fc_sni www.domain.com }
backend WWW
server SRV01 1.1.5.3:8080 check
É possível deixar os arquivos .pem separados ou aninhar todos em um único .pem, abaixo é demonstrado com múltiplos ssl em um .pem.
bind *:443 ssl crt /etc/haproxy/certs/site1.pem crt /etc/haproxy/certs/site2.pem
Testar se o arquivo de configuração esta valido
# haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid
Reinicie para validar as configurações
# /etc/init.d/haproxy restart
Onde o cenário externo tem um certificado válido emitido por um CA e internamente a aplicação tem um certificado auto assinado, é possível fazer by pass e permanecer com o certificado externo. As url's do certificado externo e interno devem ser os mesmos
### // HTTP ##################################
frontend HTTP
bind *:80
http-request add-header X-Forwarded-Proto http
# Redirecionamento para site https
redirect scheme https if { hdr(host) -i site.domain.com.br } !{ ssl_fc }
### // HTTPS ##################################
frontend HTTPS
bind *:443 ssl crt /etc/ssl/private/certificado.pem
http-request add-header X-Forwarded-Proto https
acl is_SSQL path -i /
acl SSQL hdr(host) -i site.domain.com.br
redirect code 301 location https://site.domain.com.br/path01/02/Login.aspx if SSQL is_SSQL
use_backend SQL if SSQL
backend SQL
server SQL1 <IP_SERVER>:443 check ssl verify none