当前位置: 首页 > 知识库问答 >
问题:

在节点JS TLS中从SSLv3(DHE-RSA-AES256-SHA)添加/启用密码到TLS 1.2

薛博艺
2023-03-14

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

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

经过长时间的调查,似乎在node JS10.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。但客户端不连接。

我的服务器代码:

null

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);
});

null

Openssl s_client

我如何添加或解决这些旧密码?

**新选项**

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

共有1个答案

芮朗
2023-03-14

客户端要求您的服务器使用基于DHE的密码套件支持完美的前向保密。为了实现这一点,您需要使用适当的DH参数配置服务器。

首先,您必须生成您的参数,例如:

 openssl dhparam -out dhparams.pem 2048

接下来,您需要配置应用程序来使用它们。在nodes.js中执行此操作的说明可在以下站点获得:

https://nodejs.org/docs/latest-v10.x/api/Tls.html#TLS_Perfect_Forward_Secrecy

 类似资料:
  • 在本章中,我们将重点介绍RSA密码加密的不同实现及其所涉及的功能。 您可以引用或包含此python文件以实现RSA密码算法实现。 加密算法包含的模块如下 - from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from Crypto.Signature import PKCS1_v1_5 from Crypto

  • 问题内容: 我这样在Node.js中加密了一个字符串。 我注意到nodejs中的缓冲区就像十六进制,但每2个连续字符都成对出现。因此,如果我将其转换为十六进制,则长度只有一半。 例: 缓冲: 十六进制: 现在,我在aes256中使用的密钥的长度不能为64。这里,缓冲区的长度为32,十六进制的长度为64。 我想在golang中解密此密码,我将不得不使用此密钥和iv对其进行解密。 golang中的ae

  • 有没有办法将PostgreSQL密码加密方法从MD5更改为SHA? 如果是,你能告诉我怎么做吗? 我正在使用PostgreSQL 9.5

  • 我有一个项目与spring和Cassadra DB。实际上,将cassandra.yml中的客户机enrcyption设置为false会起作用。 工作设置(使用spring XML bean和设置为false的客户端封装) 现在我想要启用客户端到节点加密(节点到节点已经设置好并正在工作)。我在网上找到了一些教程,解释了如何创建所需的密钥库,但我无法找到如何建立一个spring项目来处理它。 我在c

  • 我试图在iOS端加密一些东西,然后在我的节点上解密。js服务器。在服务器上,我正在使用library forge。我能够在node上对某些内容进行加密和解密。js,这很有效。我这样加密:

  • 问题内容: 我在Java中有一个加密代码。我正在尝试将加密部分移植到节点。基本上,节点将使用crypto模块进行加密,然后Java将进行解密。 这是我在Java中进行加密的方法: 这是我在节点中进行加密的方法: 在Java中,我得到了string 。这将正确解密。但是,在node中,我得到了明显不同的内容,因此无法正确解密。 我试图寻找与我有相同问题的人,而这个 github问题是我所能找到的最接