WildFly несколько доменов и SSL-сертификаты

у меня два разных домена

  • example1.com
  • example2.com

каждый домен имеет свой собственный сертификат SSL.

то, что я пытаюсь сделать сейчас, использует оба домена для одного экземпляра WildFly, поддерживая SSL.

в документации WildFly говорится, что я могу ссылаться только на один сертификат в хранилище ключей. Таким образом, я не могу просто определить один <security-realm> С одной keystore, содержащий как сертификаты.

таким образом, я определил два разных <security-realm>. По одному для каждого домена.

  <security-realm name="RealmExample1">
                <server-identities>
                    <ssl>
                        <keystore path="example1.jks" keystore-password="secret" />
                    </ssl>
                </server-identities>
                ...
            </security-realm>

  <security-realm name="RealmExample2">
                <server-identities>
                    <ssl>
                        <keystore path="example2.jks" keystore-password="secret2" />
                    </ssl>
                </server-identities>
                ...
            </security-realm>

однако я не могу добавить два домена безопасности на один хост.

<server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https-ext"/>
                <https-listener name="default-ssl" security-realm="UndertowRealm" socket-binding="https"/>
                <host name="default-host" alias="localhost">
                    <filter-ref name="central-basic-auth"/>
                </host>
            </server>

теперь, если я определяю сервер для каждого домена, я не могу ссылаться на ту же привязку прослушивателя http/https, так как порты заблокированы.

единственное решение, которое я нашел до сих пор, имеет два общедоступных IP-адреса и определяет два интерфейса и привязку сокета http / https для каждого взаимодействие. Затем я могу определить два сервера с другим псевдонимом и разными привязками сокетов.

на данный момент WildFly, к сожалению, не поддерживает SNI.

есть ли другое возможное решение?

2 ответов


хотя это немного усложнило бы ваше развертывание, вы рассматривали возможность размещения Apache httpd перед вашим сервером Wildfly? Это было бы не сложно сделать, и он поддерживает SNI. Вам придется изменить свои сертификаты для Apache, но тогда с виртуальным хостингом Apache у вас может быть что-то вроде:

<VirtualHost _default_:443>
    ServerName www.firstdomain.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyTimeout 360
</VirtualHost>

в первом файле виртуального хоста и:

<VirtualHost _default_:443>
    ServerName www.seconddomain.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:9080/ # if it is a different instance or
    ProxyPass / http://localhost:8080/app2 # if it the same instance, different webapp
    ProxyTimeout 360
</VirtualHost>

опять же, проблемы в том, что у вас есть другой процесс для обслуживания, и вам нужно будет настроить SSL для Apache. Но затем вы можете использовать Apache для SSL и, если хотите, такие вещи, как:

Header set Content-Security-Policy ...
Header set X-XSS-Protection "1; mode=block"

Эта настройка хорошо работала для меня с Tomcat или Wildfly за Apache.


извините за некропостинг, но есть более простой вариант - просто добавить несколько доменов одним сертификатом.

очевидный способ с сертификата.

но также Let's Encrypt позволяет указать несколько доменов для одного сертификата. И он отлично работает, не нужно ждать бесплатных подстановочных сертификатов

sh /root/.acme.sh/acme.sh --issue -d yourdomain.com -d www.yourdomain.com -d more.yourdomain.com -w /opt/wildfly-10.1.0.Final/welcome-content