Eu tenho um servidor antigo que executa um serviço Tomcat na porta 8080. Por vários motivos (incluindo proteger o acesso de clientes), tive que configurar um servidor HAProxy na frente dele, protegido com um certificado SSL.
Esta é a configuração relevante do HAProxy:
frontend myservice
mode tcp
option tcplog
option logasap
log global
option tcpka
bind 10.10.10.10:80
bind 10.10.10.10:443 ssl crt /etc/ssl/haproxy/myservice.example.org.pem
acl secure dst_port eq 443
http-response add-header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;"
http-response replace-header Set-Cookie (.*) \1;\ Secure if secure
use_backend bck_myservice if { hdr(Host) -i myservice.example.org myservice }
default_backend bck_deny
backend bck_myservice
mode tcp
balance leastconn
option prefer-last-server
server oldserver.example.org oldserver.example.org:8080 weight 1 check port 8080 inter 2000 rise 2 fall 5 ssl verify none
backend bck_deny
mode http
http-request deny
10.10.10.10 é o VIP do novo serviço, mapeado para myservice.example.org.
Acessar http://oldserver.example.org:8080 funciona normalmente.
O problema: https://myservice.example.org resulta em um erro "403 Proibido". Acessar esse URL não parece atingir o back-end do Tomcat, pois não há vestígios dele nos logs do Tomcat. (Observação: a configuração HAProxy costumava ter mode http
, mas resultou em um erro "503 Serviço indisponível".)
Acontece que o problema foi causado pela opção que desativa a verificação do certificado SSL no back-end:
ssl verify none
.Esta é a configuração de trabalho corrigida: