Add/Enable 从 SSLv3 (DHE-RSA-AES256-SHA) 到 Node JS TLS 中的 TLS 1.2 的密码
Add/Enable cipher from SSLv3 (DHE-RSA-AES256-SHA) to TLS 1.2 in Node JS TLS
我有一个我无法控制的医疗设备(客户端)。当该设备(客户端)上发生事件时,它通过 tls v1.2 连接到我的服务器以传递数据。我的错误是 "no shared cipher".
[Error: 3160:error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:openssl\ssl\statem\statem_srvr.c:1419:
]
经过长时间的调查,node js 10.9.0 似乎不支持客户端密码套件。我试图覆盖默认密码(DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA。请参阅下面的代码)并考虑更改,因为我尝试连接 openssl s_client 但失败了不支持密码。如果我将密码设置为 ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA openssl s_client 连接。如果我在列表中执行 openssl ciphers -sslv3,我会看到 DHE-RSA-AES128-SHA 和 DHE-RSA-AES256-SHA。但是客户端连接不上。
连接握手
我的服务器代码:
const tls = require('tls');
const fs = require('fs');
tls.DEFAULT_CIPHERS = 'DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA';
const options = {
key: fs.readFileSync(__dirname + '\cert\private-key.pem'),
cert: fs.readFileSync(__dirname + '\cert\cert.pem'),
rejectUnauthorized: false
};
const server = tls.createServer(options, (socket) => {
console.log('server connected',
socket.authorized ? 'authorized' : 'unauthorized');
socket.write('welcome!\n');
socket.setEncoding('utf8');
socket.pipe(socket);
});
server.on('tlsClientError', (error, tlsSocket) => {
console.log(error);
});
server.listen(8081, () => {
console.log('server bound', 8011);
});
Openssl s_client
密码 ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA
密码 DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA
如何添加或解决这个旧密码?
编辑新回复:
** 新选项 **
const options = {
key: fs.readFileSync(__dirname + '/cert/sentinel-private-key.pem'),
cert: fs.readFileSync(__dirname + '/cert/sentinel-cert.pem'),
dhparam: fs.readFileSync(__dirname + '/cert/dhparams.pem'),
ca: [fs.readFileSync(__dirname + '/cert/ca-cert.ca')],
rejectUnauthorized: false
客户端要求您的服务器使用基于 DHE 的密码套件支持完全前向保密。为此,您需要使用适当的 DH 参数配置您的服务器。
首先你必须生成你的参数,例如:
openssl dhparam -out dhparams.pem 2048
接下来您需要配置您的应用程序以使用它们。在 Nodes.js 中执行此操作的说明可在此处获取:
https://nodejs.org/docs/latest-v10.x/api/tls.html#tls_perfect_forward_secrecy
我有一个我无法控制的医疗设备(客户端)。当该设备(客户端)上发生事件时,它通过 tls v1.2 连接到我的服务器以传递数据。我的错误是 "no shared cipher".
[Error: 3160:error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher:openssl\ssl\statem\statem_srvr.c:1419: ]
经过长时间的调查,node js 10.9.0 似乎不支持客户端密码套件。我试图覆盖默认密码(DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA。请参阅下面的代码)并考虑更改,因为我尝试连接 openssl s_client 但失败了不支持密码。如果我将密码设置为 ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA openssl s_client 连接。如果我在列表中执行 openssl ciphers -sslv3,我会看到 DHE-RSA-AES128-SHA 和 DHE-RSA-AES256-SHA。但是客户端连接不上。
连接握手
我的服务器代码:
const tls = require('tls');
const fs = require('fs');
tls.DEFAULT_CIPHERS = 'DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA';
const options = {
key: fs.readFileSync(__dirname + '\cert\private-key.pem'),
cert: fs.readFileSync(__dirname + '\cert\cert.pem'),
rejectUnauthorized: false
};
const server = tls.createServer(options, (socket) => {
console.log('server connected',
socket.authorized ? 'authorized' : 'unauthorized');
socket.write('welcome!\n');
socket.setEncoding('utf8');
socket.pipe(socket);
});
server.on('tlsClientError', (error, tlsSocket) => {
console.log(error);
});
server.listen(8081, () => {
console.log('server bound', 8011);
});
Openssl s_client
密码 ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA
密码 DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA
如何添加或解决这个旧密码?
编辑新回复:
** 新选项 **
const options = {
key: fs.readFileSync(__dirname + '/cert/sentinel-private-key.pem'),
cert: fs.readFileSync(__dirname + '/cert/sentinel-cert.pem'),
dhparam: fs.readFileSync(__dirname + '/cert/dhparams.pem'),
ca: [fs.readFileSync(__dirname + '/cert/ca-cert.ca')],
rejectUnauthorized: false
客户端要求您的服务器使用基于 DHE 的密码套件支持完全前向保密。为此,您需要使用适当的 DH 参数配置您的服务器。
首先你必须生成你的参数,例如:
openssl dhparam -out dhparams.pem 2048
接下来您需要配置您的应用程序以使用它们。在 Nodes.js 中执行此操作的说明可在此处获取:
https://nodejs.org/docs/latest-v10.x/api/tls.html#tls_perfect_forward_secrecy