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