Мой вопрос касается «безопасности». Я полагаю, что этот вопрос также касается 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 [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>
НО мой контрольный вопрос касается
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?"
решение1
ProxyPass / https://127.0.0.1
Нет абсолютно никакой необходимости и мало пользы от использования TLS для обратного подключениялокальный хост.
TLS обеспечивает безопасность передачи данных, предотвращая перехват сообщений.междусистем и для обеспечения (взаимной) аутентификации ни то, ни другое не является необходимым для трафика, который не покидает систему.
В дополнение: Насколько мне известно, ни Apache 2.4, ниnginxдаже поддержка HTTP/2 для обратных прокси-соединений ProxyPass в любом случае.
HTTP/2 требует TLS, но преимущества проявляются в основном в соединении между клиентом и сервером, а не в соединениях LAN с низкой задержкой или соединениях FastCGI/ProxyPass внутри самой системы, и обычно достаточно завершить HTTP/2 на вашем внешнем интерфейсе и взаимодействовать с вашими внутренними интерфейсами по протоколу HTTP/1.1.
Примечание: Apache httpd версии 2.5 имеетэкспериментальныйподдержка 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 (открытый текст)
ProxyPass "/app" "h2c://app.example.com"
ProxyPassReverse "/app" "http://app.example.com"
решение2
Несколько слов, которые можно добавить к ответу @HBruijn.
Вы проксируете на IP-адрес:
ProxyPass / https://127.0.0.1:7072/
ProxyPassReverse / https://127.0.0.1:7072/
Редко (хотя и не невозможно), что сертификат содержит IP-адрес. Вот почему вы получаете ошибку сертификата и почему вам пришлось удалить проверки ошибок, чтобы это работало.
Я полностью согласен с @HBruijn, что использование HTTPS для прокси-соединения, особенно если оно находится на локальном хосте, не является необходимым.
Кроме того, это соединение осуществляется по протоколу HTTP/1.1, поскольку оно использует https
протокол mod_proxy_http. Apache (2.5/багажник и 2.4) позволяет Proxy Pass через HTTP/2, используя его с ( h2
) или с HTTPS ( h2c
). HTTP/2 не нуждается в HTTPS - он нужен только при использовании с браузером. Поэтому его можно использовать без HTTPS для соединений proxy pass. Однако даже h2 и h2c тогдане разрешать HTTP/2 Push на прокси-соединенияхтак что нет особой выгоды от использования этого вообще (тем более, что это все еще отмечено как экспериментальное). Рекомендуемый способ push из бэкэнда — использовать заголовки Link HTTP, что также можно сделать через соединения HTTP/1.1.
Итак, подведем итог: просто подключитесь по HTTP/1.1 без HTTPS, чтобы избежать необходимости отключать эти проверки. Вы по-прежнему можете push с внутреннего сервера, используя заголовки Link.