1866179_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1866179_zh-CN

1866179_zh-CN

OpenSSL 无法正确处理 refpem 密钥,nxp 方案正常工作

大家好,

我正在尝试集成 SE050 以便在 node.js 网络服务器中使用。我成功编译了包括 OpenSSL 提供商在内的中间件,还让 sscli 正常工作。

我使用 ssscli 创建了一个密钥对,将其注入 SE 并创建了一个 refpem 密钥。我还修改了系统的 openssl.cnf 文件,使其与 simwtop/demos/linux/common/openssl30_sss_se050.cnf 文件中的一致。

但是,与服务器的任何 TLS 连接都会在握手中失败,因为 OpenSSL 使用对密钥槽的参考作为实际私钥,而不是调用 SE050 提供商。

我还尝试让它与 OpenSSL CLI(即 openssl s_server)配合使用。我可以使用 nxp: 方案获得连接,但不能使用 refpem 密钥文件。

以下命令会导致错误:



openssl s_server -accept 12345 -cert server.pem -key server.refpem.key -CAfile root.pem


错误:



SSL3 alert read:fatal:decrypt error
SSL_accept:error in error
ERROR
20203CA4FFFF0000:error:1B80006E:lib(55):ossl_parse_query:trailing characters:../openssl-3.0.13/crypto/property/property_parse.c:454:HERE-->/usr/lib/libsssProvider.so
20203CA4FFFF0000:error:0A00041B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:../openssl-3.0.13/ssl/record/rec_layer_s3.c:1590:SSL alert number 51 
shutting down SSL


不过,如果我使用 nxp 网址方案,就能成功连接到服务器。



openssl s_server -accept 12345 -cert server.pem -key nxp:0x6789ABCD -CAfile root.pem


但是,我无法在 node.js 代码中指定 nxp: 0x6789ABCD 密钥参考,但必须使用 refpem 文件。有办法做到这一点吗?

我还尝试通过在配置文件中指定一个 propquery,让 OpenSSL 优先使用 SE050 提供程序,而不是默认提供程序。但目前还没有收获。



# Relevant parts from openssl.cnf
[openssl_init]
providers = provider_sect
alg_section = evp_properties

[provider_sect]
default = default_sect
nxp_prov = nxp_prov_sec

[default_sect]
 activate = 1

[nxp_prov_sec]
identity = nxp_prov
module = /usr/local/lib/libsssProvider.so
activate = 1

[evp_properties]
default_properties = ?provider=nxp_prov


如能得到任何帮助,将不胜感激!

SE050Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

我忘了说,我使用的 Node 版本是 20.12.2。
,20.x 之后的版本可能没有这个问题,但我目前无法验证。

经过进一步调查,发现客户端解密问题是由于提供程序加载顺序不正确造成的。

不过,这个版本的 Node 在处理随机数生成方面存在问题。

问题与 Node 如何初始化提供程序有关。


node.cc 文件包含一个修复程序(在源代码中带有注释),但它不适用于 libsssProvider.so。

我在此分享一系列变通方法,以防有人遇到类似情况。
首先,我要说的是,这些都与 libsssProvider 有关,主要目的是不更改 Node 或 OpenSSL,因此显然可以采用其他更简洁的解决方案。

我不能分享代码,希望下面的信息足够清楚。

可用选项:
1.在 CMakeLists.txt 文件中,设置 SSS_PROV_DISABLE_SE05X_RNG 变量。
这就完全禁止了 SE05X 的随机使用。
这并不理想,但如果你没有任何特殊需要,它还是可行的。
2.在 sssProvider_main.c 中文件,更改 srands 结构的算法,使提供的名称不是已知名称之一(尤其不是默认名称)。
3. 与第 2 点类似,但在这种情况下,名称可选择由环境变量提供(srands 显然不能是常量)。这样,只有在 Node 应用程序中才能避免使用 SE05X 随机发生器,而将其用于其他用途。


有了这些选项, refpems 可以正常工作。

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

我遇到了与@tksec 完全相同的问题。

如果使用 OpenSSL cli 工具,一切正常,我可以通过 libsssProvider.so 使用 SE052 模块中的密钥建立 TLS 连接。

关于 Node.js、我确认 libsssProvider 已加载,但握手总是失败,错误如下:

SSL3 alert write:fatal:decrypt error
SSL_connect:error in error
20109DB6FFFF0000:error:0A00007B:SSL routines:tls_process_cert_verify:bad signature:/usr/src/debug/openssl/3.2.1/ssl/statem/statem_lib.c:584:

@Kan_Li所建议的通过 id 调用键似乎并不奏效:

- 如果我在 options.key 中提供 refpem 文件的路径,服务器就能顺利启动并监听连接,但正如报告所述,握手失败。

- 如果我在 options.key 中提供 urk 密钥路径(nxp: ),应用程序就会崩溃。

-如果我在 options.key 中提供密钥参考 (nxp: ) 应用程序会崩溃

那么,能否请@Kan_Li分享一段可以成功初始化服务器的 Node.js 代码,假设如上所述,这应该可以正常工作?

谢谢!

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

@tksec

你找到在 node.js 中使用密钥参考的合适方法了吗?

我也有类似的问题。我正在使用带有 OpenSSL 3.0.14 的 se05x-openssl-provider (v01.00.03) 来生成密钥对,但我无法按照 openssl 提供商 Github 仓库自述文件中的描述使用文件格式为 " 的 " 参考密钥。
其他两个版本(带有参考密钥的标签(示例-恩智浦:" 参考密钥文件路径 ")和带有密钥 ID 的
标签(示例-nxp: 0x12345678)运行良好。

自述文件内容如下:" 注意:使用此方法时,必须先加载 sss 提供程序。这将确保 sss 提供商可以解码引用密钥中存在的密钥 ID 信息 。 "
遗憾的是,我不知道如何做到这一点。通过在 openssl.cnf 文件中添加提供程序来加载提供程序对我来说不起作用。如果我想使用文件格式的参考密钥,我仍然会遇到解密错误。

在此先表示感谢。

致以最诚挚的问候

托马斯

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

你好@tksec


感谢您提供的信息!您使用 refpem 文件的用例是什么?签署&验证?我可以尝试在这里重现这个问题。


顺祝商祺!

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

你好@Kan_Li

是的,我使用了 ssscli 工具。我运行的是 MW v4.05.00。我在另一个系统上用 OpenSSL 创建了原始密钥。使用 ssscli set 命令将其加载到 SE 中,并使用 ssscli refpem 命令创建 refpem。在使用 s_client、s_server、rsa 等 openssl 命令时,可以成功使用和解析该密钥。也可以使用 OSSL_STORE API(openssl 命令的内部功能)将其转换为 EVP_PKEY,但使用 PEM_read_bio_PrivateKey 无法解析,而 NXP 引擎(在 EmbSe_LoadPrivKey 中)和 node.js 都使用 PEM_read_bio_PrivateKey。

谢谢您!

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

你好@tksec


您是如何为 RSA 密钥生成 refpem 的?您现在使用的是哪个版本的 MW?请予以澄清。


祝您愉快,
Kan


-------------------------------------------------------------------------------
注:
- 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢!
- 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略
如果您以后有相关问题,请另开新主题,并参考已关闭的主题。
-------------------------------------------------------------------------------

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

你好@Kan_Li

谢谢你说明 refpem 密钥只能用于 openssl 引擎。特别是 node.js 的问题在于,它们会直接对提供的任何密钥字符串调用 PEM_read_bio_PrivateKey 函数,而当密钥字符串不是 PEM 字符串或文件路径而是 uri 时,该函数显然会失效。目前还没有对 OpenSSL 提供商的直接支持。

我改回使用 OpenSSL 引擎,结果也遇到了类似的问题。使用 EC 密钥时工作正常,而使用 RSA 密钥时,在解析 PEM 文件时再次出现错误:1E08010C:DECODER routines::unsupported from OpenSSL。我调试了代码,可以将错误追溯到 PEM_read_bio_PrivateKey 函数,该函数在引擎代码中的 EmbSe_LoadPrivKey 中调用。

您知道在 OpenSSL 引擎中处理 RSA refpem 密钥的问题吗?如何解决这个问题?在我看来,RSA 的 refpem 比 EC 密钥的侵入性更强,这可能是个问题?

Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working

你好@tksec


refpem 密钥文件仅适用于 openssl 引擎,但由于您使用的是带有提供程序的 openssl 3.xx,因此请使用"nxp:key_id" 代替。你可以将"se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient.sh" 与"se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient_3_0.sh" 进行比较,检查两者的区别。 我还想知道你对此是否有任何网络安全问题,实际上从我的选择来看,它只是大多数脚本应该接受的字符串,为什么不能在 node.js 代码中指定 nxp: 0x6789ABCD 密钥参考?请澄清。


祝您愉快,
Kan


-------------------------------------------------------------------------------
注:
- 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢!
- 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略
如果您以后有相关问题,请另开新主题,并参考已关闭的主题。
-------------------------------------------------------------------------------


Tags (1)
No ratings
Version history
Last update:
‎11-22-2025 12:00 AM
Updated by: