Приложение Azure AMS node js не может установить соединение TLS 1.2

У меня есть приложение node js, работающее как мобильная служба в Azure AMS. Я использую библиотеку запросов для выполнения HTTPS-запросов get / post api на внешний сервер. Раньше все работало нормально до тех пор, пока несколько дней назад внешний объект не решил прекратить поддержку TLS 1.0 и ниже.

Мне было интересно, знает ли кто-нибудь об известных проблемах блокировки / сбоя связи TLS 1.1 / 1.2 с внешними узлами в Azure AMS? Этот хост использует действующий сертификат SSL, выданный DigiCert.

Внутри моего кода я уже пробовал несколько вещей, чтобы явно указать nodejs использовать TLS 1.1 / 1.2, но это не сработало.

var httpRequest = require("request"),
https = require('https');

https.globalAgent.options.secureProtocol = 'TLSv1_2_method'; // Instructing to use TLS 1.2
....


httpRequest.post('https://external-api-url.com', {
    'json': true,
    'body': params,
    'timeout': 20000,
    'jar': false,
    'headers': {
        "Arr-Disable-Session-Affinity": true
    }

}, function(err, response, body) {
    // Code to handle response.
});

Помимо globalAgent, я также попытался установить secureProtocol из agentOptions, а также непосредственно из объекта параметров. Ни один из подходов не сработал.

Любая помощь будет оценена.

Спасибо.


person imkhoja    schedule 09.09.2015    source источник
comment
В последнее время я никогда не использовал TLS 1.2 на Node, но на ASP.NET WebAPI. Насколько я знаю, если вы хотите использовать TLS 1.2, вам потребуется 1) Win 08R2 или новее. 2) Обновите ключи реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols, добавьте TLS 1.1\Client TLS 1.1\Server TLS 1.2\Client TLS 1.2\Server с ключами Enabled = 0x01 и DisabledByDefault = 0x00. Может, ты попробуешь.   -  person Shaun Xu    schedule 10.09.2015


Ответы (1)


Ваша проблема связана с версией NodeJS в мобильной службе Azure.

Версия NodeJS в мобильной службе Azure - v0.8.28. Вы можете увидеть его в разделе «AppSettings» на странице Azure Kudu Env https://www.your_ams_name›.scm.azure-mobile.net/Env, как показано на рисунке ниже.

введите описание изображения здесь

Однако NodeJS добавляет TLS 1.1 / 1.2 в список secureProtocol, начиная с версии 0.11.6, как показано на рисунке ниже.

введите описание изображения здесь

Поэтому, когда внешний объект решил прекратить поддержку TLS 1.0, ваше приложение nodejs не работало.

Но вы можете следовать примерам NodeJS с поддержкой API Https TLS или модулем запроса с поддержкой протокола TLS / SSL API, чтобы установить options.key и options.cert для этого. См. https://nodejs.org/docs/v0.8.28/api/https.html#https_https_request_options_callback и https://github.com/request/request#tlsssl-protocol.

Пример:

var fs = require('fs')
    , path = require('path')
    , certFile = path.resolve(__dirname, 'ssl/client.crt')
    , keyFile = path.resolve(__dirname, 'ssl/client.key')
    , request = require('request');

https.globalAgent.options.cert = certFile;
https.globalAgent.options.key = keyFil;

Наилучшие пожелания.

person Peter Pan    schedule 10.09.2015
comment
Возможно, ты прав. Хотя мой package.json устанавливает версию узла на 0.12.0. Разве это не имеет никакого эффекта? В любом случае, я свяжусь с вами после подтверждения. Спасибо! - person imkhoja; 10.09.2015
comment
Питер Пэн - Вы были абсолютно правы насчет версии. Это 0.8.28, хотя я все еще озадачен тем, что он не выбрал инструкцию версии из файла package.json (установлен на 0.12.0). Есть идеи, почему? Я попробую использовать подход с сертификатом и ключом globalAgent, но мне было интересно, можно ли как-нибудь обновить версию nodejs? Я нахожусь на бесплатном уровне, поэтому не уверен, обновит ли Azure среду выполнения за меня. Ваш комментарий может быть принят как ответ. - person imkhoja; 10.09.2015
comment
@imkhoja Поддержка TLS secureProtocol интегрирована в NodeJS, поэтому она не работает через установку более высокой версии в package.json. Обновление среды выполнения для NodeJS или других языков следует за обновлением Azure, а не специально для кого-либо. Если вам нужно использовать специальную версию Node, я предлагаю использовать виртуальную машину Azure и установить ее самостоятельно. Спасибо за отмеченный ответ. - person Peter Pan; 11.09.2015