O proxy reverso do Apache httpd retorna SSL_ERROR_RX_RECORD_TOO_LONG quando o HTTP redireciona para HTTPS

0

Estou configurando um proxy reverso do Apache v2.4 httpd para outro servidor que hospeda o Atlassian Confluence.

O endereço IP privado do proxy é 10.0.0.77, seu endereço IP público é 77.77.77.77 e um registro DNS A mapeia o IP público para confluence.example.com .

Existe um NAT em vigor:

  • 77.77.77.77:10080 - > 10.0.0.77:80
  • 77.77.77.77:10443 - > 10.0.0.77:443

que é necessário porque o endereço IP público do proxy também é usado para outros serviços.

A resolução de nomes no proxy é feita via /etc/hosts , que mapeia confluence.example.com a 10.0.0.9, o IP privado do servidor do Confluence.

Aqui está /etc/httpd/conf.d/confluence.conf (como você vê, também faz um redirecionamento de HTTP para HTTPS):

<VirtualHost *:80>
    ServerName confluence.example.com
    ProxyRequests off
    ProxyPreserveHost off
    SetEnv force-proxy-request 1
    SetEnv proxy-nokeepalive 1
    ProxyPass        "/" "http://confluence.example.com:8090/" 
    ProxyPassReverse "/" "http://confluence.example.com:8090/"
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    ServerName confluence.example.com
    ServerSignature On
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    SSLEngine on
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    # SSL cipher suite shortened for clarity
    SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384"
    SSLCertificateFile    /etc/httpd/ssl/example.crt
    SSLCertificateKeyFile /etc/httpd/ssl/example.key
    SSLCACertificateFile  /etc/httpd/ssl/example.crt
    ProxyRequests off
    ProxyPreserveHost on 
    ProxyPass        "/" "http://confluence.example.com:8090/" 
    ProxyPassReverse "/" "http://confluence.example.com:8090/"
</VirtualHost>

Ao acessar o link (ou mesmo link ) de um navegador, o URL muda para link mas, em vez de exibir a página de login do Confluence, esse erro é retornado:

Secure Connection Failed
An error occurred during a connection to 77.77.77.77:10080. SSL received a record that exceeded the maximum permissible length. Error code: SSL_ERROR_RX_RECORD_TOO_LONG

Isso é o que está registrado (nível DEBUG) no log de acesso http:

33.33.33.33 - - [17/Sep/2018:17:06:59 +0200] "GET / HTTP/1.1" 302 208 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
33.33.33.33 - - [17/Sep/2018:17:06:59 +0200] "\x16\x03\x01\x02" 400 226 "-" "-"

e para o log de erros http:

[Mon Sep 17 17:11:58.095085 2018] [core:debug] [pid 23120] protocol.c(1271): [client 33.33.33.33:49745] AH00566: request failed: malformed request line

Configurei logs de acesso e de erros de https separados, nada está registrado lá. Como você deve ter adivinhado, 33.33.33.33 é meu IP público de saída.

O acesso ao link funciona bem.

A mesma configuração funciona em outro proxy reverso do Apache v2.2.

Alguma dica?

    
por dr01 18.09.2018 / 12:22

1 resposta

1

Eu faço isso para minhas instâncias do Tomcat. (Anteriormente Confluence, agora XWiki.)

  1. O http → https vHost é um redirecionamento direto, sem proxies.
  2. O https vHost gerencia as regras de proxy para o Tomcat, sabendo que o URI tem um padrão sã.

Aqui está uma versão (ligeiramente) editada da minha configuração:

<VirtualHost *:80>
        ServerAdmin [email protected]

        ServerName confluence.example.com

        DocumentRoot /home/www/confluence.example.com/docroot


        # Global protection
        #
        <Directory />
                Options none
                AllowOverride None
        </Directory>


        # Send users to canonical website
        #
        Redirect / https://confluence.example.com/


        # Logging
        #
        ServerSignature On
        LogLevel warn
        ErrorLog "|/usr/bin/cronolog /home/www/confluence.example.com/logs/%Y/%m/%d/public-error.log"
        CustomLog "|/usr/bin/cronolog /home/www/confluence.example.com/logs/%Y/%m/%d/public-access.log" combined

</VirtualHost>

<VirtualHost *:443>
        ServerAdmin [email protected]

        ServerName confluence.example.com

        DocumentRoot /home/www/confluence.example.com/docroot
        AddDefaultCharset UTF-8


        # Global protection
        #
        <Directory />
                Options none
                AllowOverride None
        </Directory>


        # Access to the application itself
        #
        ProxyPassMatch /(.*) http://confluence.example.com:8090/$1
        ProxyPassReverse / http://confluence.example.com:8090/
        ProxyPassReverseCookieDomain confluence.example.com confluence.example.com


        # Logging
        #
        ServerSignature On

        LogLevel warn rewrite:debug
        ErrorLog "|/usr/bin/cronolog /home/www/confluence.example.com/logs/%Y/%m/%d/secure-error.log"
        CustomLog "|/usr/bin/cronolog /home/www/confluence.example.com/logs/%Y/%m/%d/secure-access.log" combined

        #RewriteLogLevel 1
        #RewriteLog "|/usr/bin/cronolog /home/www/confluence.example.com/logs/%Y/%m/%d/secure-rewrite.log"


        # SSL
        #
        SSLEngine on

        SSLCertificateFile      "...crt"
        SSLCertificateKeyFile   "...key"
        SSLCertificateChainFile "...ca-bundle"

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
    
por 19.09.2018 / 11:34