我有一个无法控制的医疗设备(客户端)。当该设备(客户端)上发生事件时,它将通过tls v1.2连接到我的服务器以传递数据。我遇到的错误是“无共享密码”。


  [错误:3160:错误:1417A0C1:SSL例程:tls_post_process_client_hello:无共享密码:openssl \ ssl \ statem \ statem_srvr.c:1419:
  ]


经过长期调查,看来节点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密码-sslv3,则会看到DHE-RSA-AES128-SHA和DHE-RSA-AES256-SHA。但是客户端无法连接。

连接握手
node.js - 将SSLv3(DHE-RSA-AES256-SHA)中的密码添加/启用到Node JS TLS中的TLS 1.2-LMLPHP

我的服务器代码:



onst 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_客户端

密码ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA
node.js - 将SSLv3(DHE-RSA-AES256-SHA)中的密码添加/启用到Node JS TLS中的TLS 1.2-LMLPHP

密码DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA
node.js - 将SSLv3(DHE-RSA-AES256-SHA)中的密码添加/启用到Node JS TLS中的TLS 1.2-LMLPHP

如何添加或解决此旧密码?

编辑新回复:
node.js - 将SSLv3(DHE-RSA-AES256-SHA)中的密码添加/启用到Node JS TLS中的TLS 1.2-LMLPHP

**新选项**

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

10-07 18:03