【问题标题】:Azure AMS node js app failing to make a TLS 1.2 connectionAzure AMS 节点 js 应用无法建立 TLS 1.2 连接
【发布时间】:2015-12-05 19:43:29
【问题描述】:

我有一个节点 js 应用程序在 Azure AMS 上作为移动服务运行。我一直在使用请求库对外部服务器进行 HTTPS 获取/发布 api 调用。直到几天前,当外部实体决定停止支持 TLS 1.0 及更低版本时,一切都可以正常工作。

我想知道是否有人知道 Azure AMS 阻止/失败 TLS 1.1/1.2 与外部主机通信的任何已知问题?该主机使用由 DigiCert 颁发的有效 SSL 证书。

在我的代码中,我已经尝试了一些方法来明确告诉 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,我还尝试从 agentOptions 以及直接从 options 对象中设置 secureProtocol。这些方法都不起作用。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 我从未在 Node 上使用过 TLS 1.2,但最近在 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 = 0x01DisabledByDefault = 0x00。也许你可以试一试。

标签: node.js azure ssl request tls1.2


【解决方案1】:

您的问题是 Azure 移动服务上的 NodeJS 版本的原因。

Azure 移动服务上的 NodeJS 版本为 v0.8.28。您可以在 Azure Kudu Env 页面https://<your_ams_name>.scm.azure-mobile.net/Env 的“AppSettings”部分看到它,如下图所示。

但是,NodeJS 从 0.11.6 版本开始将 TLS 1.1/1.2 添加到 secureProtocol 列表中,如下图所示。

因此,当外部实体决定停止支持 TLS 1.0 时,您的 nodejs 应用程序无法运行。

但是您可以按照 NodeJS 示例使用 Https API 支持 TLS 或使用 API 支持 TLS/SSL 协议的请求模块来设置 options.key 和 options.cert 来执行此操作。 请参考https://nodejs.org/docs/v0.8.28/api/https.html#https_https_request_options_callbackhttps://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;

最好的问候。

【讨论】:

  • 你可能是对的。虽然我的 package.json 将节点版本设置为 0.12.0。这没有任何影响吗?无论如何,我会在确认后回复您。谢谢!
  • 彼得潘 - 你对这个版本是完全正确的。它是 0.8.28,尽管我仍然很困惑它没有从 package.json 文件中选择版本指令(设置为 0.12.0)。知道为什么吗?我将尝试 globalAgent 证书和密钥方法,但想知道 nodejs 版本是否可以更新?我使用的是免费套餐,因此不确定 Azure 是否会为我更新运行时。您的评论可以作为答案。
  • @imkhoja TLS 安全协议支持已集成到 NodeJS 中,因此无法通过在 package.json 中设置更高版本来工作。 NodeJS 或其他语言的运行时更新遵循 Azure 更新,并非专门为任何人更新。如果需要使用特殊版本的Node,建议使用Azure VM,自行安装。感谢您标记的答案。
猜你喜欢
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 2018-08-17
  • 2018-09-19
  • 2021-11-21
  • 2018-07-30
  • 2022-09-28
相关资源
最近更新 更多