【问题标题】:how would you setup SSL end to end with weblogic through a netscaler您将如何通过 netscaler 与 weblogic 端到端设置 SSL
【发布时间】:2016-04-13 22:38:56
【问题描述】:

weblogic 和 netscaler 新手需要架构方面的帮助

我想将 weblogic 上的服务公开给互联网,以便移动用户可以访问 web 服务。当用户直接访问该站点时,当前内部流量正常,例如 http://xxx.internal.local:7001

我需要为内部用户和外部用户启用端到端 SSL 以及在外部和内部访问网络服务的能力

流量

  • 外部用户|||| ||||网标器|||| 网络逻辑服务器
  • 内部用户直接连接到 weblogic
  • 内部用户将使用https://xxx.internal.local:7002
    • (私有 DNS 和 IP 地址)
  • 外部用户将使用https://xxx.external.com:443
    • (公共 DNS 和 IP 地址)

已安装 SAN 证书(具有本地域和外部域)并导入到 weblogic Java 密钥库中。

实现这一目标的最佳方法是什么?

我们尝试过的事情

Netscaler 管理员在 Netscaler 上配置 SSL 直通 - 例如不解密和重新加密并将 443 端口转发到 7002

内部 DNS 中的 CNAME 设置将 xxx.external.com 指向 xxx.internal.local

  • https://xxx.internal.local:7002 的内部流量正常且已加密
  • 外部流量失败,向用户显示证书错误

我不清楚如何配置外部域和内部域以及让 netscaler 进行 SSL 桥接 - 有没有更好的方法来完成这项工作 - 例如让 netscaler 在 VIP 卸载 SSL 并重新加密回 weblogic并更改 HTTP 主机标头以匹配内部域名(反向代理)

提前致谢

【问题讨论】:

  • 负载均衡器处的 SSL 终止(对后端进行或不重新加密)和后端 SSL 终止的真正端到端(NetScaler vServer 设置为“SSL_BRIDGE”模式)是有效的选项。您可以在没有证书错误的情况下同时执行这两项操作。你要哪个?关于错误:如果我不得不猜测,那么我会说:客户端通过 external.example.com 到达,但从后端获取的证书在其 SAN 名称中不包含该外部名称。您能否提供有关错误消息的更多详细信息?截图?
  • @StackzOfZtuff 端到端与后端的 ssl 终止 - 这意味着我必须将内部域更改为与外部域相同,这在此阶段是不可能的。因此,如果我们在负载均衡器处终止并重新加密到后端,这将如何工作? netscaler 是否管理将请求和响应的主机标头更改回用户,因为它会有所不同?我还假设您需要在 NLB 和 weblogic 上安装公共证书。我可以使用相同的证书,因为它是一个包含内部和外部域的 SAN 证书吗?

标签: ssl weblogic weblogic-10.x netscaler


【解决方案1】:

虽然这是一个老问题,但对于答案并没有很多 WebLogic 特定的见解。这是我处理 WebLogic 7 年左右的经验(使用和不使用 Netscaler 作为后端)。

1) 为什么要将应用程序暴露在端口 7001 或 7002 上?通常,7001 和 7002 将容纳 AdminServer,您当然不希望人们能够访问http://...:7001/console(或https://....:7002/console)。端口 7001 和 7002 应该只能从您网络的受信任(管理)部分访问。

1a) 通常,如果您使用 Oracle 融合中间件,应用程序将在单独的托管服务器中运行,该服务器拥有自己的端口。例如,Oracle WebCentre Content 在名为 UCM_server1 的托管服务器中运行,其主要服务端口为 16200 (http) 和 16201 (https)

2) 您确实应该将 WebLogic 置于反向代理之后以显示任何类型的站点。我们通常使用 OHS(Oracle 的 httpd 版本)或 Apache httpd。然后通常您会使用 httpd 中的 weblogic_module 反向代理到您的 WebLogic 托管服务器。 (在其高级设置中,您可以设置“启用 WebLogic 模块”(或类似名称,我想不起来了)。

2a) weblogic_module 特别重要(或者更确切地说,当在反向代理后面使用时,它启用了特别重要的功能)。像知道这样的功能:

  • 流量是通过 http 还是 https 进入的(如果应用程序想要制作链接/重定向并且您想要避免重定向循环之类的事情,这很重要)。

  • 流量来自哪个 IP(在使用 SSO 时尤其重要,具体取决于您的安全设置的合理程度)

2b) 大部分 weblogic_module 所做的是设置特定的 HTTP 请求标头。在托管服务器的设置中启用“使用 weblogic 模块”只是告诉 WebLogic“信任一些进入请求的特定标头,并使用这些标头来了解有关流量来自何处以及如何进入系统的更多信息”。

实际上,我建议最好避免使用 weblogic_module,特别是如果您想在不重定向用户(更改他们的上下文以便他们可以'不仅仅是重新加载页面)。只需执行与 weblogic_module 相同的操作即可 - 这并不难。

3) 在其前面粘贴一个缓存(清漆、nginx 等)。根据我的经验,您确实希望只提供来自 WebLogic 的动态内容,并确保提供针对该目的优化的静态内容。不要不必要地占用你的工作线程;它们有时可能是稀缺资源。根据您的应用程序,您可能更喜欢让您可以轻松控制缓存标头之类的东西(因为某些产品 --- Oracle WebCentre Content,我在看你 --- 在涉及到使站点对缓存友好,而无需重写 Cache-Control 标头)。

4) 您很可能希望拥有一个 URL……拥有不同的内部和外部 URL 是……真的很糟糕。考虑使用“水平分割”DNS 等技术,这样内部客户端将获得一个 IP(例如 10.x.x.x),而外部客户端将获得另一个(例如 123.x.x.x),或者仅从一个公共 IP 提供所有服务。每个人都应该有相同的 SSL 证书;否则,HSTS 很可能会给您带来问题。

5) 说到 SSL,我建议您也为内部使用自签名证书(或本地颁发的证书,如果您有本地 CA)(例如 WebLogic 服务器,如 AdminServer 以及 Nodemanager),并且只是在实际的 web 头上有 CA 证书。

6) 如果使用 httpd,我强烈建议您使用 mod_remoteip 之类的工具部署它,因为您有一个很好的日志记录来源。

A 团队(他们来自 Oracle,对各种 Oracle 产品非常了解)有一篇关于 weblogic_module 主题的精彩博文:SSL offloading and WebLogic server

F5 有一个 useful deployment guide,它显示了您如何配置反向代理(在他们的情况下是 F5 BigIP,但仍然与 Netscaler 或只是 httpd 相关)并且不必使用 weblogic_module。

7) 你可能会恨我让你考虑这么多……但我告诉你,这一切都是由经验驱动的……其中一些是相当痛苦的。

8) 哦,如果您在 VMWare 环境(不公开硬件随机数生成器)上运行 Java 工作负载,您将需要做一些事情来确保您的应用程序只使用 /dev/urandom,从不使用 /dev/random --- 查找所有 jre/lib/security/java.security 文件并设置 securerandom.source=file:/dev/./urandom 以解决长期存在的问题(可能终于在 Java 8 的某个地方解决了)错误,它会“聪明”并最终使用 /dev/random,这使得启动等事情变得非常缓慢。

【讨论】:

    【解决方案2】:

    以下是存档的步骤。

    第一步:给netscaler添加IP(如果你有超过1个weblogic server,一个一个添加)

    Step2:使用每个服务器的内部IP(例如WebLogic_Svc1,WebLogic_Svc2)创建一个服务器

    第三步: 使用上述服务器的内部 IP 创建服务。 (如果功能正常,请使用端口#7002)

    Step4:将WebLogic上使用的证书绑定到上述服务。

    步骤 5: 现在,您可以将监视器更改为使用 SSL。(您也可以将监视器保留为默认 tcp 监视器。确保端口 7002 从 SNIP 到您的 WebLogic 是打开的,否则服务将继续显示) .

    Step6:如果你看到WebLogic_Svc1,WebLogic_Svc2 up,我们可以进行最后两个步骤。

    第 7 步:使用可路由的公共 IP 创建 LB VServer xxx.external.com,该 IP 将托管和使用端口#443。

    Step8: 将 public SSL CertKey pair 绑定到上面的 LB Vserver 。 (确保外部 SSL CertKey 链接到适当的中间证书和根证书。您的公共证书提供商将为您提供中间证书和根证书。如果您不这样做,您的公共证书仍然不会被浏览器识别为信任的下巴不会完成。)

    Step9:将以上两个服务绑定到LB VServer xxx.external.com。

    如果上述步骤对您来说太难执行,请查看以下 youtube 视频 from Andrew (theurbanpenguin)

    【讨论】:

      【解决方案3】:

      感谢大家的反馈。测试的工作方案如下。

      • 一个公开生成的 SAN 证书(在 SAN 条目中具有 ext 域和 internal 域)安装在 Netscaler 和 weblogic 服务器上

      • 外部用户将使用外部域 url 'https://xxx.external.com:443' 外部 SSL 流量将在 Netscaler 处终止,并在端口 7002 上解密并重新加密回内部 weblogic 服务器。 Netscaler 还将 request 中的 HTTP 主机标头更改为内部主机名,还将 response Http 主机标头更改为外部主机名。

      • 内部用户将只使用内部域网址,例如https://xxx.internal.local:7002

      • 据我了解,证书提供者不再使用内部域颁发证书,因此这可能对您不起作用。但我想解决这个问题。您可以使用内部域名生成内部 CA 证书。安装在 weblogic 服务器和 netscaler 上。使用外部域名购买公开生成的证书并安装在 Netscaler 上。因此外部流量将使用公共证书加密流量 - 内部流量将使用内部证书加密。

      【讨论】:

        【解决方案4】:

        已安装 SAN 证书(具有本地域和外部域)并导入到 weblogic Java 密钥库中。

        这一定意味着它是您作为证书提供者创建的本地自签名证书,不允许在证书上使用本地域。这意味着它不会被外部浏览器识别,因为它们无法识别您公司创建的自签名证书。除非您有外部颁发的通配符证书,因此对两者都适用?

        Netscaler 管理员在 Netscaler 上配置 SSL 直通 - 例如,否 解密并重新加密并将443端口转发到7002

        出于同样的原因,这将不起作用。您的服务器将从服务器发回内部证书。

        让 netscaler 在 VIP 卸载 SSL 并重新加密回 weblogic 并更改 HTTP 主机标头以匹配内部域名 (反向代理)

        这是你应该做的。为外部域购买证书,然后为内部域使用内部颁发的自签名证书。

        或者在内部和外部使用相同的域名,然后可以在两者上使用相同的证书或使用直通。通过此设置,您可以将外部 DNS 指向 LoadBalancer,并根据需要在内部直接指向 Web 服务器。

        【讨论】:

        • 我们实际上有一个公开生成的 SAN 证书,它有内部域和外部域 CN 有 ext 域,SAN 有 int 和 ext 域。我知道证书提供者不再这样做了,但令我惊讶的是他们做到了。由于内部流量已被使用并在产品中。在此阶段无法更改内部域名。所以看起来我剩下的选项是反向代理,在 netscaler 上更改 HTTP 主机标头并将流量重新加密回 weblogic。您是否也更改了响应 HTTP 标头?nvr 做到了这将如何工作
        • 应该由负载均衡器自动处理。这是一个相当常见的用例。但是,如果它是相同的证书,那么通过 SSL 也应该可以工作,因为您的 Web 服务器将基于错误的域提供证书,但这也将是正确域的证书。但是反向代理可能会更好,因为怀疑您将来能否再次获得这样的证书。您上次尝试的证书错误是什么?
        猜你喜欢
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        • 2021-06-04
        • 2014-11-14
        相关资源
        最近更新 更多