мой вопрос о «безопасности». Я полагаю, что этот вопрос также касается nodejs или springboot или чего-то еще, что работает на другом порту с apache в качестве основного сервера.
Я пробую кое-что с приложением golang и http2 / push
http2 нужен https
мое приложение golang включено https://127.0.0.1:7072/ и http2 хорошо работает над этим
после многих поисков вот мой виртуальный хост (локальный WAMP, загружен весь прокси-модуль и http2), который РАБОТАЕТ, НО:
<VirtualHost mygolang:443>
DocumentRoot "c:/wamp64/www"
ServerName mygolang:443
ServerAdmin admin@example.com
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>
НО мой секретный вопрос касается
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
если я удалю его, в браузере будет 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
Так что ты думаешь ? Удаление sslcheck - это проблема? Это еще одно элегантное решение для «у меня есть apache и я хочу полностью перенаправить, но сохранить домен в одной учетной записи на http2?»
ProxyPass / https://127.0.0.1
Абсолютно нет необходимости и мало пользы от использования TLS для обратного подключения к localhost.
TLS добавляет транспортную безопасность для предотвращения перехвата сообщений между систем и для обеспечения (взаимной) аутентификации, ни то, ни другое не требуется для трафика, не покидающего систему.
Вдобавок: насколько мне известно ни Apache 2.4, ни nginx даже поддерживать HTTP / 2 на обратных прокси-соединениях ProxyPass.
HTTP / 2 требует TLS, но преимущества существуют в основном в соединении между клиентом и сервером, а не в соединениях LAN с низкой задержкой или соединениях FastCGI / ProxyPass внутри самой системы, и обычно достаточно для завершения HTTP / 2 на вашем компьютере. интерфейс и общайтесь по протоколу HTTP / 1.1 с сервером.
Примечание. Apache httpd версии 2.5 имеет экспериментальный поддержка HTTP / 2 https://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 (открытый текст)
ProxyPass "/app" "h2c://app.example.com"
ProxyPassReverse "/app" "http://app.example.com"
Несколько вещей, которые нужно добавить к ответу @ HBruijn.
Вы проксируете IP-адрес:
ProxyPass / https://127.0.0.1:7072/
ProxyPassReverse / https://127.0.0.1:7072/
Редко (хотя и возможно) сертификат содержит IP-адрес. Вот почему вы получаете ошибку сертификата и почему вы удалили проверки ошибок, чтобы это работало.
Я полностью согласен с @HBruijn в том, что использование HTTPS для прокси-соединения, особенно когда оно находится на localhost, не нужно.
Кроме того, это соединение осуществляется через HTTP / 1.1, так как оно использует https
протокол mod_proxy_http. Apache (2,5 / багажник и 2,4) позволяет Proxy Pass через HTTP / 2, используя его с (h2
) или с HTTPS (h2c
). HTTP / 2 не требует HTTPS - он нужен только при его использовании с браузером. Таким образом, его можно использовать без HTTPS для прокси-соединений. Однако даже h2 и h2c тогда не разрешать HTTP / 2 Push на прокси-соединениях так что пользы от этого нет (тем более, что она все еще помечена как экспериментальная). Рекомендуемый способ отправки из серверной части - использовать заголовки Link HTTP, что также можно сделать через соединения HTTP / 1.1.
Подводя итог: просто подключайтесь через HTTP / 1.1 без HTTPS, чтобы не отключать проверки. Вы по-прежнему можете отправлять сообщения с внутреннего сервера, используя заголовки ссылок.