如何在 node.js 应用程序中使用私有安全连接?

How to use a private secure connection in a node.js application?

我已经建立了一个私有云集成>基本安全连接,但是为了use/access我必须使用相互TLS 在我的 node.js 应用程序中(它也在 BlueMix 上)。
我看到这个 post: 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(本地)发生了什么,似乎连接是 refused/denied。我真的不知道我应该如何处理从 BlueMix 下载的不同证书。如果有人能提供帮助,我将不胜感激。

Cloud Integration 当前不支持到也使用 TLS 或 HTTPS 的后端的相互 TLS。您需要允许通过 HTTP 访问您的应用,以便 Cloud Integration Mutual TLS 正常运行。

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

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

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()