0

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

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

我需要为内部用户和外部用户启用端到端 SSL,并能够在外部和内部访问 web 服务

车流量

  • 外部用户|||| <--HTTPS-->|||| 网标器|||| <--HTTPS--> weblogic 服务器
  • 内部用户直接连接到 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 主机头(反向代理)

提前致谢

4

4 回答 4

1

尽管这是一个老问题,但对于答案并没有很多 WebLogic 特定的见解。这是我 7 年左右处理 WebLogic(有和没有 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,特别是如果您想在不重定向用户的情况下获得更好的“哎呀,站点不可用”体验(即 503 处理程序)(改变他们的上下文,这样他们就不能只是重新加载页面)。只需做与 weblogic_module 相同的事情——这并不难。

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

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

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

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

A-Team(他们来自 Oracle ——并且对各种 Oracle 产品非常了解)有一篇关于 weblogic_module 主题的精彩博客文章:SSL 卸载和 WebLogic 服务器

F5 有一个有用的部署指南,展示了如何配置反向代理(在他们的情况下是 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,从而使启动之类的事情变得非常缓慢。

于 2018-11-17T05:50:04.227 回答
1

谢谢大家的反馈。测试的工作溶液如下。

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

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

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

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

于 2016-01-23T21:16:43.330 回答
0

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

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

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

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

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

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

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

于 2016-01-09T18:53:18.810 回答
0

以下是存档的步骤。

Step1:将IP添加到netscaler(如果您有1个以上的weblogic服务器,则一个一个添加)

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

Step3:使用上述服务器的内部IP创建服务。(如果可用,请使用端口#7002)

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

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

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

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

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

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

如果上述步骤对您来说太难了,请参阅Andrew (theurbanpenguin) 的以下 youtube 视频

于 2016-07-11T04:25:35.350 回答