【问题标题】:WildFly multiple domains and SSL certificatesWildFly 多域和 SSL 证书
【发布时间】:2016-09-21 16:09:46
【问题描述】:

我有两个不同的域

  • example1.com
  • example2.com

每个域都有自己的 SSL 证书。

我现在要做的是将两个域用于同一个 WildFly 实例,支持 SSL。

WildFly 文档指出,我只能引用密钥库中的单个证书。因此,我不能只定义一个 <security-realm> 和一个包含两个证书的密钥库。

因此,我定义了两个不同的<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。

还有其他可能的解决方案吗?

【问题讨论】:

  • 我不熟悉 WildFly,但是除非 WildFly 支持 SNI,否则您需要两个独立的 IP,因为您已经找到了。 SNI 是使单个 IP 地址上的多个 HTTPS 站点工作的原因。我找不到任何说明 WildFly 10 支持 SNI 的信息。我会先查明 WildFly 是否支持 SNI,然后查找相应的文档(如果支持)。
  • 感谢您的回答。 WildFly 10 不支持开箱即用的 SNI。不过,有一张 Jira 票证要求使用该功能:issues.jboss.org/browse/XNIO-227
  • 这就是你的答案。如果没有 SNI,您需要多个 IP 地址。这是 TLS 的限制,而不是 WildFly。如果没有 SNI,TLS 无法告诉 WildFly “哪个”主机正在解析到该 IP 地址。
  • @kevcodez 如果你找到了解决方案,请告诉我,我现在也有同样的问题。
  • @midikko 我们首选的解决方案,如下所述,是在 WildFly 应用程序服务器前面使用 Apache Web 服务器。 Apache 更加稳定并且拥有庞大的社区。此外,Apache 支持多个域/证书的 SNI。

标签: ssl wildfly wildfly-10


【解决方案1】:

虽然这会使您的部署有点复杂,但您是否考虑过将 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>

同样,问题是您需要维护另一个进程,并且您需要为 Apache 设置 SSL。但是您可以使用 Apache 来执行 SSL,如果您愿意,还可以执行以下操作:

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

这个设置在 Apache 后面的 Tomcat 或 Wildfly 对我来说效果很好。

【讨论】:

  • 感谢您的回答。我们实际上正在试验您提到的确切设置(Apache + WildFly)。这也是我们首选的解决方案,因为我们不想暴露 WildFly。
【解决方案2】:

很抱歉发布了 necroposting,但有一个更简单的选项 - 只需将多个域添加到一个证书。

通配符证书的明显方式。

但 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多