问题标签 [openssl-engine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
381 浏览

linux - OpenSSL 如何选择使用哪个 ENGINE?

我有一个应用程序,它与 OpenSSL 1.0.2 和 TPM 硬件与 RSA 的 OpenSSL ENGINE 实现动态链接。

我使用 OpenSSL 的动态ENGINE 来注册 TPM ENGINE。这是(简化的)代码的样子:

根据手册页,由于我调用ENGINE_register_all_complete()而不是ENGINE_set_default_RSA,我让 OpenSSL 决定使用哪个 RSA 实现。

下次 OpenSSL 尝试设置 RSA 密钥时,任何实现 RSA_METHOD 的捆绑 ENGINE 都将被传递给 ENGINE_init(),如果其中任何一个成功,则该 ENGINE 将被设置为从那时起使用 RSA 的默认值

OpenSSL 是否会将已注册 ENGINE 中的 RSA 实现优先于其自己的实现?

当注册了多个为同一算法提供实现的 ENGINE 时会发生什么?OpenSSL 会使用它能够初始化的第一个 ENGINE 吗?

如果ENGINE_set_default_XXX不调用,是否可以保证使用已注册的 ENGINE?

0 投票
0 回答
554 浏览

c++ - 使用 ECDSA 进行 C++ OpenSSL 签名 - 需要使用十六进制密钥,并且不确定如何创建上下文

我正在尝试在 Linux 上使用 C++17(尽管我的 C++ 经验主要是在 90 年代!)来完成一些签名/验证,我有一个使用openssl CLI 的功能示例。这是我的 CLI 代码:

现在使用 C++,我尝试使用 OpenSSL (v1.1.1) 作为共享库(很高兴)并尝试坚持使用 C++ 而不是降级到 C 级别。为简单起见,假设我在 C++ 中有使用 openssl 共享库的函数,其名称与它们在库中引用的 C 函数相同。我有一个以这种方式工作的普通 SHA256 哈希。对于签名,我的出发点是 DER 格式(二进制)私钥的十六进制转储。例子:const string privhex = "3020af013b...";

我知道我需要创建一个 EVP_PKEY(以获取 EVP_MD_CTX 以使用 EVP_DigestSign())并且我被困在如何从十六进制转储到那里。这是我的代码:

显然,我省略了一些细节,比如设置缓冲区和传递指针与引用等。

我已经检查了一些相关问题:当​​我使用 C++ 拥有 HEX 格式的公钥时,我可以创建 openssl EC_KEY这个没有答案。这一个如何将 ECC 私钥导入 OpenSSL 的 EC_KEY?有一个相对于 OpenSSL 版本越来越旧的答案,不使用 EVP,我不知道为什么我必须设置在创建密钥时已经给出的各种参数(CLI 不需要,它必须提取所有内容从私钥)。

0 投票
1 回答
151 浏览

c - 如何使用 OpenSSL EVP API 中的密钥索引加密/解密?

我的系统包括一个硬件安全模块(HSM),它将对称/非对称密钥导入其内部存储器,然后为外部用户提供密钥索引以供将来使用(加密/解密)。

我现在正在为此 HSM 编写一个 OpenSSL 引擎,预计应用程序将通过 OpenSSL EVP API 调用该引擎。

应用程序级代码(用 C 语言)通过 EVP API 函数调用加密服务(例如,通过存储在 HSM 中的用户密码加密某些内容)的正确方法是什么,只需在参数中提供密钥索引,而不是密钥本身?

我知道 EVP 和引擎 API 为开发人员提供了一些“控制功能”,但它们似乎用于命令行参数。我想知道在库使用中使用它们传递键索引是否是正确的方法。

更新:

我现在正在尝试使用EVP_CIPHER中的ctrl函数将密钥导入 HSM。

我想知道哪个更好,在“init_ex”步骤(在EVP_CIPHER->init中调用ctrl)或在“do_cipher”步骤中(使用EVP_CIPHER_CTX_set_app_data在 do_cipher 之前将密钥传递给app_data,然后在 do_cipher 中调用ctrl)?

0 投票
1 回答
306 浏览

openssl - 通过 openssl.conf 文件加载 OpenSSL 自定义引擎显示错误

我有一个简单的 openssl 引擎,我想通过openssl.conf文件加载到 OpenSSL 中。我openssl-1.1.1c使用以下配置设置从源代码安装,

./config --prefix=/opt/openssl -DOPENSSL_LOAD_CONF --openssldir=/opt/openssl

安装后$openssl version显示如下,

之后,我改变openssl.conf如下,

进行这些更改后,openssl engine命令显示以下内容,

知道我做错了什么吗?

0 投票
1 回答
236 浏览

c - 错误:重新定义“struct rsa_meth_st”

我正在尝试开发一个 RSA 引擎。在我尝试将我的引擎与 apache httpd 服务器集成之前,我的引擎一直在工作。从源代码安装httpd后,事实证明,我无法编译我的引擎代码了。我在尝试编译时收到以下错误(它之前正在编译,我没有对我的引擎代码进行任何更改)。

我的示例源代码如下所示,

我注意到,使用新版本的操作系统,我的代码编译和运行良好。我知道这struct rsa_meth_st是在文件中定义的ossl_typ.h,但以前没有抛出任何错误,但为什么现在呢?

gcc version的是gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

0 投票
1 回答
169 浏览

linux - 加载 OpenSSL 引擎后如何使用 OpenSSL 命令行进行操作(例如签名)?

我在ubuntu 20.4中写了一个自定义的OpenSSL引擎和引擎测试器。OpenSSL 版本是 1.1.1。

目标是在 TLS 会话中使用引擎,第一步是使用命令行签署摘要。参考网站是: https ://wiki.openssl.org/index.php/Creating_an_OpenSSL_Engine_to_use_indigenous_ECDH_ECDSA_and_HASH_Algorithms

但是测试人员通过调用函数来使用引擎,如代码中的ECDSA_sign和ECDSA_verify,不能按预期运行。我希望达到这样的效果:

$ openssl dgst -engine <engine_id> -sha256 -sign -out

所以我该怎么做?这可行吗?非常感谢!

0 投票
1 回答
61 浏览

linux - 如何为私有 CA 设置 OCSP 服务器并且查询很少

我已经生成了我的私有根 CA,然后是用于签署证书而不是直接 RootCA 的中间 CA。现在我想设置 OCSP 服务器,因此有一些查询。

  • 既然我使用的是Intermediate CA,我应该使用Int CA来生成CSR并生成CRT吗?还是应该使用 Root 来生成 OCSP crt?我计划提供大约 400-500 台服务器服务器证书,因此想知道一个 ocsp 服务器是否足以满足我检查吊销的需要?谁能告诉我直接nginx是否可以用于设置ocsp服务器或只需要我们openssl ocsp api?
0 投票
0 回答
99 浏览

ssl - 如何在 OpenSSL 库中指定用于 SSL 功能的引擎?

我了解 openssl ```ENGINE 和 evp 的工作原理,以及如何在 libcrypto C 语言编程中使用引擎(对纯数据应用摘要/加密/签名等)。

现在我想学习如何为 SSL 函数背后的所有加密过程应用引擎,包括密码套装。似乎没有用于 SSL 函数的参数或初始化函数来指定ENGINEEVP_EncryptInit_ex() 等中的内容。

我知道 libssl 中的加密过程是基于 libcrypto 的,所以也许我可以使用相同的方式,即在调用任何 SSL 函数之前指定默认引擎:

它有效吗?

或者我应该加载 openssl.cnf 吗?虽然我觉得是一样的。

0 投票
0 回答
57 浏览

openssl - 用于配置自定义引擎并生成证书的 OpenSSL 命令

我对 OpenSSL 很陌生。需要生成公私密钥对,验证。我们有自己的定制引擎。问题是如何验证自定义引擎是否正常工作。我尝试了以下方法,但没有成功。

编辑 /etc/ssl/openssl.cnf 文件如下

CMD:openssl 引擎 foo -t

对我来说,它的回归如下:

我不明白引擎是否加载。是否可以通过加载的自定义引擎生成公私钥对、x509 证书?

0 投票
0 回答
69 浏览

openssl - 用于在 openssl 中签名算法的自定义 OID

是否可以在 openssl 中使用自定义 OID 来签署算法,我已经上传了一个使用自定义私有 oid 的示例证书,并且该 oid 使用 ed25519ph 映射。使用openssl怎么可能,还有其他支持这种自定义方法的ca吗?

在此处输入图像描述