【问题标题】:How to use a private secure connection in a node.js application?如何在 node.js 应用程序中使用私有安全连接?
【发布时间】:2015-04-30 23:52:59
【问题描述】:

我已经建立了 private Cloud Integration>Basic Secure Connection,但是要使用/访问它,我必须在我的 node.js 应用程序中使用 mutual TLS(其中也在 BlueMix 上启用)。
我看过这篇文章:https://developer.ibm.com/bluemix/2015/04/17/securing-destinations-tls-bluemix-secure-gateway/,它描述了一种使用私有安全连接的方法。

但我想做的是向安全连接发送一个 HTTPS 请求,以便它进入我的后端。在 node.js 中,我有一个处理用户操作的 HTTP 服务器,我正在使用以下代码发出 HTTPS 请求:

var https = require('https');
var fs = require('fs');
var options = {
        host: cloud_ip,
        port: cloud_port,
        path: '/path_to_resource',
        method: 'POST',     
        cert: fs.readFileSync('<endpoint>-basic-client-cert.pem'),
        key: fs.readFileSync('<endpoint>-basic-private-key'),
        ca: fs.readFileSync('DigiCertCA2.pem'),
        agent: false,
};
var req = https.request(options, callback);
req.on('error', function(e) {
    io.emit('message', 'Error: ' +JSON.stringify(e));
});
req.end()

我的后端没有任何响应,我试图监控 Wireshark(本地)发生的情况,似乎连接被拒绝/拒绝。我真的不知道应该如何处理从 BlueMix 下载的不同证书。如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

  • 回调在哪里定义?你也没有req.on("data")
  • @Jeff Sloyer:抱歉,我删除了回调,因为它与这个问题无关。回调在我的 options 变量之后定义,执行 req.on('data') 并在屏幕上打印一些内容。

标签: node.js integration ibm-cloud


【解决方案1】:

云集成目前不支持到同样使用 TLS 或 HTTPS 的后端的双向 TLS。您需要允许通过 HTTP 访问您的应用,才能使 Cloud Integration Mutual TLS 正常运行。

执行此操作后,您应该会看到连接到达您的后端。

【讨论】:

  • 好的,所以后端需要接受 HTTP,否则双向 TLS 将不起作用。我理解正确吗?你有一个文档/链接提到那个吗?你知道这个“功能”将来会不会出现?
  • 是的,没错。如果后端不是 HTTP,TLS 将无法工作。 Secure Gateway 服务(独立于 Cloud Integration 的“安全连接器”)将在不久的将来支持后端的 TLS。
  • 我刚刚将我的后端服务更改为接受 HTTP,这很有效。谢谢马特。好的,我会留意 Secure Gateway。
【解决方案2】:

您链接的博客文章是针对 Secure Gateway 的,但听起来您正在使用云集成服务。如果您已经成功创建并连接了基本连接器并创建了私有端点,那么下面的 node.js 脚本应该允许您向服务器发出 get 请求。

var https = require('https');
var fs = require('fs');
var options = {
    host: '<ip on cloud integration endpoint>',
    port: <port given by cloud integration on endpoint>,
    path: '/pathToApi',
    method: 'GET',     
    cert: fs.readFileSync('myCertfile.pem'),
    key: fs.readFileSync('myKeyFile'),
    agent: false,
    rejectUnauthorized: false
};
var req = https.request(options, function(res){
    res.on('data', function(d){
        process.stdout.write(d);
    });
});
req.end()

【讨论】:

  • 你说得对,我正在混合使用安全网关和云集成,而我使用的是云集成。你的脚本和我的很像,但我已经尝试过你的建议,但没有奏效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多