Как использовать частное безопасное соединение в приложении node.js?

Я установил частную интеграцию с облаком>Basic Secure Connection, но затем, чтобы использовать/получить к нему доступ, мне нужно использовать взаимный TLS в моем приложении node.js (которое также включено). на Блюмикс).
Я видел это сообщение: 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. Я был бы очень признателен, если бы кто-то мог помочь.


person Rick    schedule 30.04.2015    source источник
comment
Где определяется обратный вызов? У вас также нет req.on("data").   -  person Jeff Sloyer    schedule 30.04.2015
comment
@Jeff Sloyer: извините, я удалил обратный вызов, потому что он не имел отношения к этому вопросу. Обратный вызов определяется после моей переменной параметров, выполняет req.on('data') и печатает что-то на экране.   -  person Rick    schedule 30.04.2015


Ответы (2)


Облачная интеграция в настоящее время не поддерживает взаимный TLS для серверной части, которая также использует TLS или HTTPS. Вам потребуется разрешить доступ к вашему приложению через HTTP, чтобы облачная интеграция Mutual TLS работала правильно.

Как только вы это сделаете, вы должны увидеть, что соединения достигают вашего бэкэнда.

person Matt Hamann    schedule 30.04.2015
comment
Итак, серверная часть должна принимать HTTP, иначе взаимный TLS не будет работать. Я правильно понимаю? У вас есть документ/ссылка на это? И знаете ли вы, будет ли эта функция доступна в будущем? - person Rick; 30.04.2015
comment
Да это верно. TLS не будет работать без HTTP. Служба Secure Gateway (отдельно от Secure Connectors Cloud Integration) в ближайшем будущем будет поддерживать TLS на серверной части. - person Matt Hamann; 30.04.2015
comment
Я только что изменил свой серверный сервис, чтобы принимать HTTP, и это сработало. Спасибо, Мэтт. Хорошо, я буду следить за Secure Gateway. - person Rick; 30.04.2015

Сообщение в блоге, на которое вы ссылаетесь, предназначено для 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()
person Alex Yurkowski    schedule 30.04.2015
comment
Вы правы, я смешиваю Secure Gateway и облачную интеграцию, и я использую облачную интеграцию. Ваш сценарий очень похож на мой, но я попробовал ваше предложение, и оно не сработало. - person Rick; 30.04.2015