Принудительное перенаправление HTTPS на Wildfly 10.0 направляет к https://localhost:8443
У меня очень сложное время, когда я пытаюсь установить HTTPS на установку Bitnami Ubutnu Wildfly 10.
HTTPS работает нормально (например, https://example.com/ отлично работает)
Я пробовал много разных вещей без результата. Вот некоторые основные моменты того, что я сделал:
Я изменил свой web.xml, чтобы добавить это (обратите внимание, что MYWEBNAME было заменено моим именем файла войны):
<security-constraint>
<web-resource-collection>
<web-resource-name>MYWEBNAME</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Я изменил /opt/bitnami/apache2/conf/bitnami/bitnami.conf (согласно https://docs.bitnami.com/aws/components/apache/):
<VirtualHost _default_:80>
DocumentRoot /opt/bitnami/apache2/htdocs"
ADD: RewriteEngine On
ADD: RewriteCond %{HTTPS} !=on
ADD: RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
...
</VirtualHost>
Я изменил standalone.xml
<management-interfaces>
<http-interface security-realm="ApplicationRealm" http-upgrade-enabled="true">
<socket-binding https="management-https"/>
</http-interface>
</management-interfaces>
Я изменил свой корневой index.html для перенаправления на:
<SCRIPT>document.location="https://example.com";</SCRIPT>
В соответствии с Wildfly 9 http для https, я попробовал это:
<http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
<socket interface="management" secure-port="${jboss.management.http.port:9990}"/>
</http-interface>
это привело к ошибке 503 и смерти дикой бабочки, поэтому я удалил ее.
Теперь у меня есть http://example.com/ перенаправляющий на https://localhost:8443/
Поэтому я думаю, что это близко, я просто не могу понять, как заставить его перенаправить на https://example.com:8443/
2 ответа
Для тех, кто ищет решение, вот краткое изложение того, что я сделал - все в одном месте. Это сводка ссылок, расположенных в этой теме, поэтому обращайтесь к тем авторам, которые ответили на вопрос. Кредит принадлежит им, это всего лишь краткое изложение того, что сработало для меня.
1. Добавьте правило маршрутизации IPTABLES на порт 443–8443.
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
Подсказка: чтобы увидеть, какие правила у вас уже есть, используйте:
sudo iptables -t nat -L -n -v
2. Добавьте фильтр перезаписи и предикат в конфигурацию. Добавьте записи, показанные в строках 10 и 24 фрагмента.
<subsystem xmlns="urn:jboss:domain:undertow:3.0">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https"/>
<https-listener name="default-ssl" security-realm="ApplicationRealm" socket-binding="https"/>
<host name="default-host" default-web-module="YOURWARFILENAMEHERE.war" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
<filter-ref name="http-to-https" predicate="equals(%p,8080)"/>
<!-- ADD THE filter-ref ENTRY ABOVE -->
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
<filters>
<response-header name="server-header" header-name="Server" header-value="WildFly/10"/>
<response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
<rewrite name="http-to-https" redirect="true" target="https://DOMAINNAMEHERE:8443%U"/>
<!-- ADD THE rewrite ENTRY ABOVE, BE SURE TO SUBSTITUTE YOUR DOMAIN NAME -->
</filters>
</subsystem>
Примечание: мне было интересно, будет ли достаточно добавить перенаправление iptables с 8080 на 8443 с помощью команды на шаге 1 и устранить необходимость в шаге 2. Но шаг 2 сработал для меня, поэтому я пошел с ним. Я оставлю пробовать этот вариант читателю, если они захотят.
3. Измените раздел " Интерфейсы управления" в standalone.xml.
<management-interfaces>
<http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
<socket-binding https="management-https"/>
</http-interface>
</management-interfaces>
Обратите внимание, что это заменило привязку к http. Также обратите внимание, что этот шаг не может быть напрямую связан с пересылкой HTTP к HTTPS, а скорее является шагом в настройке HTTPS.
4. Перезапустите свой экземпляр Wildfly.
Я не использую прокси Apache Wildfly. Но в моей настройке все запросы на порт 80 или 8080 ( http://example.com/ или http://example.com:8080/) перенаправляются на порт 443 ( https://example.com/). Это делается с помощью iptables для перенаправления трафика с 80 на 8080 и с 443 на 8443, после чего wildfly перенаправляет КОНФИДЕНЦИАЛЬНЫЕ транспортные запросы на порт 443 вместо 8443. Пожалуйста, посмотрите, полезно ли это: заставьте wildfly прослушивать порт 443, а не 8443
Кстати, использование JavaScript или любого другого сценария на стороне клиента для перенаправления на SSL недостаточно безопасно, если ответственность за перенаправление находится на стороне клиента.