我对Bluemix安全网关的基础知识很满意,但我看不出一个好的方法来设置一个必须是常见的场景。
我的要求是:
- 现有的内部服务是通过TLS提供的,并且必须保持这种状态。它不检查客户端证书,它只是一个传统的https://ReST API。
- 安全网关管道的外部端必须检查客户端证书,只允许某些已知的客户端连接。
第二点是通过在安全网关UI中设置目的地时选择TLS互认证选项来实现的。但是,这会创建一个从客户端应用程序(此时实际上只是一个浏览器)到安全网关管道内部端的TLS连接。从管道的末端向内部服务输出的是明文的纯HTTP。内部服务正确地拒绝了这个请求,因为它正在等待HTTPS。
我可以通过配置安全网关的连接没有TLS,然后我得到一个从客户端浏览器TLS连接到内部服务器,但这里的问题是,Bluemix管是敞开的,有人在互联网上扔东西在内部服务器,尽管我们都知道"可信内部网"应该是一个神话,事实是,这个东西从来没有建立,apple。我想在Bluemix管道的外端阻止任何人,除了我的已知客户端。
我认为我需要的是一种管道的内部端,在docker映像中运行,与内部服务器启动第二个TLS会话的方法。似乎是一个明显必要的功能,但我在文档中找不到任何参考。还是我错过了别的什么方式?
自从发布这篇文章以来,我已经与一位Bluemix开发人员取得了联系(我是ibm员工-这个选项可能不是每个人都可用:-))。答案是目前还不支持,但很快就会支持。
我敢说会有办法把openssl s_client或类似的东西钩到流中,但对我来说,支持的版本已经足够接近了,不值得这么复杂。
Pete的答案是正确的,但由于它被否决了,我将重申并添加一些信息。
当前你不能连接到TLS后端,除非你使用你建议的No TLS选项。很快,您将能够通过您所描述的设置完成此操作,目标配置了TLS:从客户端到最终目的地的相互认证和TLS。
如果你真的想现在完成这个,你可以在你的客户端建立一个隧道来将TCP连接转换为TLS连接。下面链接的教程中有一个如何在node.js中建立这样一个隧道的示例,但是您将在客户端创建这个隧道。使用隧道的主机/端口创建目的地,然后让隧道连接到您的REST API。
https://developer.ibm.com/bluemix/2015/04/17/securing-destinations-tls-bluemix-secure-gateway/编辑:客户端TLS现在已经添加。这个特性的文档可以在这里找到:https://www.ng.bluemix.net/docs/services/SecureGateway/index-gentopic3.html sg_011