【发布时间】:2018-09-14 09:21:27
【问题描述】:
我开发了一个 NodeJs+express 应用程序,部署为 IBM Cloud 中的 Cloud Foundry 应用程序。 我想执行相互身份验证(客户端和服务器证书)以控制传入流量和对我的应用程序的请求。我的证书由 Secure Gateway 生成,如 here 所述,我的应用程序配置为云目标(可从本地客户端访问)。
安全网关已生成以下 pem 文件:服务器的主证书、中间证书和根证书以及目标证书和密钥。 在文档中有一个非常清晰的Nodejs example 使用 tls.createServer。
在我的场景中存在一些差异: 首先,我处于相反的情况(本地客户端通过创建隧道的安全网关连接到云应用程序)。 其次,这也是这篇文章的主要原因,我的应用被部署为 CF 应用。
阅读关于 HTTP routing 的 CF 文档我发现 IBM 云仅使用端口 80 和 443,然后通过 HTTP 将请求转发到应用程序正在侦听的端口(例如,如果我的 NodeJs 在端口 6001 上运行,而我在端口 443 上调用云端点,GoRouter 将通过 HTTP 将请求转发到正确的端口,添加 X-Forwarded-Proto 标头以将用于请求的原始协议的信息传递给应用程序。
考虑到这一点(假设这是正确的),在我的 NodeJs 代码中,我不能使用像 https.createServer(opts, app) 这样的东西,因为所有到达 App Container 的请求都将通过 HTTP。
阅读 CF 文档here 我知道可以告诉 CF 将证书转发给我的应用程序,但有些东西我无法真正理解。
首先,在负载均衡器或 GoRouter 终止 TLS 有什么区别?这种选择背后的原因是什么?
我的第二个问题是,将证书作为 HTTP 标头转发到我的应用程序后,哪种方法才是正确的处理方式?这是因为我的 NodeJs 服务器将是一个 http 服务器,使用 express 以标准方式 http.createServer(app) 创建。
感谢所有帮助我解决这个问题的人。显然,如果您有任何示例或建议,那将非常有帮助。
【问题讨论】:
标签: node.js express ssl cloud-foundry mutual-authentication