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

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

minha pergunta é sobre "segurança", suponho que esta pergunta também seja para nodejs ou springboot ou qualquer outro que esteja rodando em outra porta com o apache como servidor primário

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

http2 precisa de https

meu aplicativo golang está ativadohttps://127.0.0.1:7072/ e http2 funcionando bem nisso

depois de muitas pesquisas aqui está meu virtualhost (WAMP local, todos os módulos proxy e http2 carregados) 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, haverá 500 no navegador:

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 o apache e quero redirecionar completamente, mas preservar o domínio em uma conta em http2?"

Responder1

ProxyPass        /  https://127.0.0.1

Não há absolutamente nenhuma necessidade e poucos benefícios em usar TLS para conectar-se novamentehost local.
TLS adiciona segurança de transporte para evitar espionagem nas comunicaçõesentresistemas e para fornecer autenticação (mútua), nenhuma das quais é necessária para o tráfego que não sai do sistema.

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

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 terminar HTTP/2 em seu front-end e comunique-se em HTTP/1.1 com seus back-ends.

Nota: Apache httpd versão 2.5 temexperimentalsuporte para HTTP/2https://httpd.apache.org/docs/trunk/mod/mod_proxy_http2.html

HTTP/2 (TLS)

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

HTTP/2 (texto simples)

ProxyPass "/app" "h2c://app.example.com"
ProxyPassReverse "/app" "http://app.example.com"

Responder2

Algumas coisas a acrescentar à resposta de @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 contenha um endereço IP. É por isso que você está recebendo um erro de certificado e removeu as verificações de erros para que isso funcionasse.

Concordo totalmente com @HBruijn que usar HTTPS para a conexão de passagem de proxy - especialmente quando está no host local - é desnecessário.

Além disso, esta conexão é via HTTP/1.1, pois usa o httpsprotocolo mod_proxy_http. Apache (2,5/tronco e 2.4) permite Proxy Pass over HTTP/2 usando-o com ( h2) ou com HTTPS ( h2c). HTTP/2 não precisa de HTTPS - somente ao usá-lo com o navegador ele precisa disso. Portanto, ele pode ser usado sem HTTPS para conexões de passagem de proxy. No entanto, mesmo h2 e h2c entãonão permitir HTTP/2 Push em conexões proxyportanto, não há muitos benefícios em usar isso (especialmente porque ainda está marcado como experimental). A maneira recomendada de enviar push do back-end é usar cabeçalhos Link HTTP - o que também pode ser feito em conexões HTTP/1.1.

Resumindo: basta conectar-se via HTTP/1.1 sem HTTPS para evitar ter que desligar essas verificações. Você ainda pode enviar push do servidor back-end usando cabeçalhos de link.

informação relacionada