Принудительное перенаправление 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 недостаточно безопасно, если ответственность за перенаправление находится на стороне клиента.

Другие вопросы по тегам