JHH*_*JHH 10 https node.js tls1.2
我正在使用客户端证书从节点应用程序进行HTTPS连接:
var options = {
hostname: 'https://my-server.com',
port: 443,
path: '/',
method: 'GET',
key: fs.readFileSync('client1-key.pem'),
cert: fs.readFileSync('client1-crt.pem'),
ca: fs.readFileSync('ca-crt.pem') };
var req = https.request(options, res => {
[...]
});
Run Code Online (Sandbox Code Playgroud)
一切正常,但我想添加代码以确保只允许TLS 1.2连接.我找不到任何方法在https.agent选项或其他地方配置它.是否可以配置它,或者我是否必须建立连接然后查询协议版本,例如:
res.socket.getProtocol() === 'TLSv1.2'
如果协议不满意,请中止连接?
sup*_*654 21
首先,我找到了有关发出HTTPS请求的文档.它提到您可以传递其他选项,tls.connect()其中包括一些名为secureProtocol.深入研究tls.connect(),我找到了secureContext提及的选项tls.createSecureContext().最后提到secureProtocol了可以使用OpenSSL页面中的字符串指定的内容.我选择了一个看起来合理的字符串(TLSv1_2_method)并secureProtocol直接将选项传递给了https.request.
这打印SSL Version: TLS 1.2与给定secureProtocol和SSL Version: TLS 1.1与secureProtocol: "TLSv1_1_method".如果无法使用给定的TLS版本建立连接,则将调用末尾的错误处理程序.
var https = require('https')
var options = {
hostname: 'www.howsmyssl.com',
port: 443,
path: '/a/check',
method: 'GET',
secureProtocol: "TLSv1_2_method"
}
https.request(options, res => {
let body = ''
res.on('data', d => body += d)
res.on('end', () => {
data = JSON.parse(body)
console.log('SSL Version: ' + data.tls_version)
})
}).on('error', err => {
// This gets called if a connection cannot be established.
console.warn(err)
}).end()
Run Code Online (Sandbox Code Playgroud)
小智 9
只是关于此解决方案的更新,几年过去了,有些事情已经发生了变化。
Node 文档现在建议使用minVersionand ,maxVersion因为secureProtocol最后一个选项已成为选择 TLS 协议版本的遗留机制,因此您可以通过使用以下命令获得相同的结果minVersion: "TLSv1.2":
var https = require('https')
var options = {
hostname: 'www.howsmyssl.com',
port: 443,
path: '/a/check',
method: 'GET',
minVersion: "TLSv1.2",
maxVersion: "TLSv1.2"
}
...
Run Code Online (Sandbox Code Playgroud)
参考文献:节点文档:tls_tls_createsecurecontext_options
| 归档时间: |
|
| 查看次数: |
12837 次 |
| 最近记录: |