如何启用禁用的密码 OpenSSL

How do you enable a disabled cipher OpenSSL

我正在尝试在节点 js 中使用 ADH-AES256-GCM-SHA384 密码。

所有节点 js 代码都说你可以 select 一个存在于 tls.getCiphers() 列表中的密码。该密码不存在。它也不存在于使用 openssl ciphers -V 看到的默认密码列表中(与 tls.getCiphers() 列表匹配)。

openssl ciphers -V aNULL 显示 OpenSSL 中存在但已禁用的密码。

根据 OpenSSL 网站,这只能通过重新编译 OpenSSL 来添加到启用的密码列表中。我有最新的源代码 (3.0.0)。我假设您通过 运行 使用命令行参数的配置脚本或在某处更改配置文件来更改支持的参数列表。

但我找不到任何关于在何处或如何执行此操作的参考。

有人可以告诉我这是记录的地方吗?

提前致谢

TLDR:密码(套件)在那里

aNULL 套件在所有版本的 OpenSSL 中编译,甚至是 3.0.0,尽管它们在使用默认密码列表时 禁用 。你不需要重新编译任何东西。 (因为我怀疑任何 nodejs 包是针对几周前才发布的 OpenSSL 3.0 构建的,而且我什至不确定它是否兼容,所以你不想尝试使用 3.0。)我不知道为什么 tls.getCiphers() 没有列出它们;我稍后会尝试调查。 (甚至编译了 eNULL 套件,但不仅从 DEFAULT 中排除,而且从 ALL 中排除,并且必须明确指定或作为 COMPLETEMENTOFALL,这在数学上是疯狂的。OTOH 密码 声称机密性但已损坏,如 RC4 和 1DES,未使用 'standard' 配置编译。)

但是,要使用 ADH 密码套件(包括您命名的那个),您必须:

  • 提供(温度)DH 参数。这是 documented for DHE 但同样适用于 ADH

  • 指定一个至少包含所需套件的密码列表,并且对于 OpenSSL 1.1.0 以上版本还设置 @SECLEVEL=0(因为添加了 1.1.0 全局安全级别默认为 1,禁用 ADH)

以下对我有效:

const fs = require('fs');
const tls = require('tls');
const dhparam = fs.readFileSync("n:certx/dh1parm.pem");
var svr = tls.createServer({ciphers:"aNULL:@SECLEVEL=0",dhparam}, 
    (socket)=>{console.log("connected!\n")} );
svr.listen(9889);