是否有像 SSL_CTX_use_*PrivateKey for ECDSA 这样的 OpenSSL 函数?

Is there an OpenSSL function like SSL_CTX_use_*PrivateKey for ECDSA?

我是加密的新手,尤其是 OpenSSL。我仍处于学习阶段,正在查看文档(甚至是源代码)。我看到函数称为: SSL_CTX_use_PrivateKey SSL_CTX_use_RSAPrivateKey

但我没有看到一个类似于 SSL_CTX_use_ECDSAPrivateKey 的东西。

有没有这样的功能,就是找不到?还是 ECDSA 是以另一种方式处理的?

您应该对 ECDSA 使用 SSL_CTX_use_PrivateKey。此函数是处理所有键类型的通用函数。事实上,在即将推出的 OpenSSL 3.0 中,SSL_CTX_use_RSAPrivateKey 已被弃用,SSL_CTX_use_PrivateKey 是包括 RSA 在内的所有密钥类型的首选函数。

为了使用 SSL_CTX_use_PrivateKey,您需要将密钥作为 EVP_PKEY 对象传递。如果您拥有 EC_KEY 对象形式的密钥,那么您可以使用 EVP_PKEY_new() 创建一个新的 EVP_PKEY,然后使用 EVP_PKEY_set1_EC_KEY 将您的 EC_KEY 分配给它或 EVP_PKEY_assign_EC_KEY。参见:

https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_new.html https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_set1_EC_KEY.html

作为替代方案,您可以使用 SSL_CTX_use_PrivateKey_file,它将自动从文件中加载密钥。同样,您可以将此函数用于任何密钥类型(包括 RSA 和 ECDSA)。