Apache e Golang (ou nodejs ou springboot etc.) com SSLPROXYpass e HTTP2

1

minha pergunta é sobre "segurança" Eu suponho que esta questão é também para nodejs ou springboot ou qualquer outra execução em outra porta com o apache como servidor principal

Estou tentando algumas coisas com o app golang e o http2 / push

link

meu aplicativo golang está no link e http2 funcionando bem com isso

depois de muita pesquisa aqui é o meu virtualhost (WAMP local, todo o módulo proxy e http2 carregado) que está funcionando, mas:

<VirtualHost mygolang:443>

DocumentRoot "c:/wamp64/www"
ServerName mygolang:443
ServerAdmin [email protected]
ErrorLog "c:/wamp64/bin/apache/apache2.4.27/logs/ssl_error.log"
TransferLog "c:/wamp64/bin/apache/apache2.4.27/logs/access.log"


SSLEngine on
SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off


SSLCertificateFile "C:\wamp64\bin\apache\apache2.4.27\conf\cert\certificate.crt"
SSLCertificateKeyFile "C:\wamp64\bin\apache\apache2.4.27\conf\key/private.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "c:/wamp64/www">
    SSLOptions +StdEnvVars
</Directory>


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

CustomLog "C:\wamp64\bin\apache\apache2.4.27\logs\ssl_request.log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

ProxyRequests On
ProxyPreserveHost On
ProxyVia full
<proxy>
    Order deny,allow
    Allow from all
  </proxy>

  ProxyPass        /  https://127.0.0.1:7072/
  ProxyPassReverse /  https://127.0.0.1:7072/
</VirtualHost> 

MAS minha pergunta de segurança é sobre

SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

se eu removê-lo, há um navegador 500:

Proxy Error
The proxy server could not handle the request GET /.

Reason: Error during SSL Handshake with remote server

Apache/2.4.27 (Win64) OpenSSL/1.1.0f PHP/7.1.9 Server at mygolang Port 443

Então, o que você acha? Remover o sslcheck é um problema? É outra solução elegante para "eu tenho apache e quero redirecionar totalmente, mas preservar domínio em uma conta em http2?"

    
por Ledahu 22.03.2018 / 08:50

2 respostas

1

ProxyPass        /  https://127.0.0.1

Não há absolutamente nenhuma necessidade e pouco benefício em usar o TLS para se conectar de volta a localhost .
O TLS adiciona segurança de transporte para evitar interceptação nas comunicações entre sistemas e para fornecer autenticação (mútua), nenhuma das quais é necessária para o tráfego que não deixa o sistema.

Além disso: Até onde eu sei, nem o Apache 2.4 nem o nginx suportam o HTTP / 2 no ProxyPass conexões de proxy reverso de qualquer maneira.

HTTP / 2 requer TLS, mas os benefícios existem principalmente na conexão entre o cliente e o servidor, não tanto em conexões LAN de baixa latência, ou conexões FastCGI / ProxyPass dentro do próprio sistema e geralmente é suficiente para finalizar HTTP / 2 no seu front-end e se comunicar em HTTP / 1.1 para seus back-ends.

Nota: A versão 2.5 do Apache httpd tem suporte experimental para o link HTTP / 2

HTTP / 2 (TLS)

ProxyPass "/app" "h2://app.example.com"
ProxyPassReverse "/app" "https://app.example.com"

HTTP / 2 (texto não criptografado)

ProxyPass "/app" "h2c://app.example.com"
ProxyPassReverse "/app" "http://app.example.com"
    
por 22.03.2018 / 09:53
0

Algumas coisas para adicionar à resposta do @ HBruijn.

Você está fazendo proxy para um endereço IP:

ProxyPass        /  https://127.0.0.1:7072/
ProxyPassReverse /  https://127.0.0.1:7072/

É raro (embora não impossível) que um certificado tenha um endereço IP. É por isso que você está recebendo um erro de certificado e porque removeu as verificações de erro para que isso funcione.

Eu concordo totalmente com @HBruijn que usar HTTPS para a conexão de passagem de proxy - especialmente quando está em localhost - é desnecessário.

Além disso, esta conexão é sobre HTTP / 1.1, pois está usando o protocolo https mod_proxy_http. Apache ( 2.5 / trunk e 2.4 ) permite a passagem de proxy sobre HTTP / 2 usando-a com ( h2 ) ou com HTTPS ( h2c ). O HTTP / 2 não precisa de HTTPS - apenas ao usá-lo com o navegador, ele precisa disso. Por isso, pode ser usado sem HTTPS para conexões de passagem de proxy. No entanto, mesmo h2 e h2c, então, não permitem HTTP / 2 Push em conexões proxy , então não há muito benefício em usar isso em tudo (especialmente como ainda é marcado como experimental). A maneira recomendada de fazer push a partir do backend é usar cabeçalhos Link HTTP - o que também pode ser feito em conexões HTTP / 1.1.

Então, para resumir: basta conectar-se via HTTP / 1.1 sem HTTPS para evitar a necessidade de desativar as verificações de verificação. Você ainda pode empurrar a partir do servidor de back-end usando cabeçalhos de link.

    
por 23.03.2018 / 00:26