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 https
protocolo 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.