[英]Azure AMS node js app failing to make a TLS 1.2 connection
我有一个节点js应用程序,在Azure AMS上作为移动服务运行。 我一直在使用请求库对外部服务器进行HTTPS get / post 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。 这些方法均无效。
任何帮助将不胜感激。
谢谢。
您的问题是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应用程序将无法正常工作。
但是您可以使用具有Https API支持TLS的NodeJS示例或具有API支持TLS / SSL协议的请求模块来设置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;
最好的祝福。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.