您将如何通过 netscaler 与 weblogic 端到端设置 SSL

how would you setup SSL end to end with weblogic through a netscaler

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

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

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

交通流量

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

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

我们尝试过的东西

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

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

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

提前致谢

SAN Cert (has local domain and external domain) installed and imported into the weblogic Java key Stores.

这一定意味着它是您创建的本地 self-signed 证书,因为证书提供商不允许在证书上使用本地域。这意味着它不会被外部浏览器识别,因为它们不识别贵公司创建的 self-signed 证书。除非你有一个外部颁发的通配符证书因此适用于两者?

Netscaler admin configuring SSL Pass through on the Netscaler - eg no decrypt and re encrypt and forwards 443 port to 7002

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

have the netscaler offload SSL at VIP and re ncrypt back to weblogic and changing the HTTP host headers to match the internal domain name (reverse proxy)

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

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

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

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

  • 外部用户将使用外部域 url 'https://xxx.external.com:443' 外部 SSL 流量将终止于 Netscaler 解密并 re-encrypted 返回到内部 weblogic端口 7002 上的服务器。 Netscaler 还将 request 中的 HTTP host header 更改为内部主机名 还将更改 response Http host headers 到外部主机名。

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

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

以下是存档的步骤。

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

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

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

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

第 5 步: 现在,您可以将监视器更改为使用 SSL。(您也可以将监视器保留为默认的 tcp 监视器。确保从 SNIP 到您的 WebLogic 的端口 7002 已打开,否则服务会一直显示下去)。

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

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

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

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

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

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

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

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

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

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

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

  • 流量来自哪个 IP(如果使用 SSO 则尤为重要,具体取决于您的安全设置的健全程度)

2b) 大多数 weblogic_module 所做的是设置特定的 HTTP 请求 headers。在托管服务器的设置中启用 'Use weblogic module' 只是告诉 WebLogic "trust some particular headers that come into the requests and use those to learn more about where the traffic came from and how it entered the system".

实际上,我建议最好避免使用 weblogic_module,特别是如果您想在不重定向用户(改变他们的上下文)的情况下获得更好的 "oops, the site is unavailable" 体验(即 503 处理程序)所以他们不能只是重新加载页面)。只需做 weblogic_module 正在做的同样的事情 -- 它并不十分困难。

3) 在它前面贴一个缓存(清漆、nginx 等)。根据我的经验,您确实希望只提供来自 WebLogic 的动态内容,并确保提供来自为此目的优化的内容的静态内容。不要不必要地占用您的工作线程;它们有时可能是稀缺资源。根据您的应用程序,您可能更喜欢让您可以轻松控制诸如缓存 headers 之类的东西(因为某些产品 --- Oracle WebCentre Content,我正在看着你 --- 只是没用在不重写 Cache-Control headers).

的情况下制作网站 cache-friendly

4) 您很可能希望拥有一个 URL...具有不同的内部和外部 URLs 是...真的很糟糕。考虑使用 'split-horizon' DNS 等技术,内部客户端将获得一个 IP(例如 10.x.x.x),而外部客户端将获得另一个 IP(例如 123.x.x.x),或者只提供来自一个 public IP。每个人都应该拥有相同的 SSL 证书;否则 HSTS 很可能会给您带来问题。

5) 说到 SSL,我建议您也使用 self-signed 证书(如果您有本地 CA,则使用本地颁发的证书)用于内部(例如 WebLogic 服务器,如 AdminServer,以及Nodemanager),并在实际 web-heads.

上拥有 CA 证书

6) 如果使用 httpd,我强烈建议您使用 mod_remoteip 之类的方式部署它,这样您就有了良好的日志记录来源。

A-Team(他们来自 Oracle -- 并且对各种 Oracle 产品非常了解)有一篇很好的博客 post 关于 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 解决非常 long-standing(可能最终在 Java 8 的某个地方解决)错误,它会是 'clever' 并最终使用 /dev/random,使事情像启动慢得离谱。