openssl - 如何使用 OpenSsl 在 SSL 证书消息中保存公钥?
问题描述
我想将公钥及其算法保存在 SSL 证书消息中。
在 OpenSSL 库中,我找到了一个名为 public_key_type 的函数,它返回公钥算法。但是为了提取公钥,我发现了一个名为 evp_PKEY_print_public 的函数,它打印公钥。但我不想打印它。我的目标是将它保存在一个结构中。任何人都可以帮助我吗?
解决方案
从您的问题来看,我并不完全清楚您所说的“将其保存在结构中”是什么意思。但我可以解释如何访问存储在证书中的实际公钥,这样你就可以用它做你想做的事。
首先,您可以使用以下内容以通用格式获取证书的公钥:
EVP_PKEY *pubkey = X509_get_pubkey(cert);
/* If it is not NULL, do what needs to be done with pubkey */
EVP_PKEY_free(pubkey);
有关更多信息,请参阅文档。X509_get_pubkey()
现在您有了这个通用公钥,您可以使用其较低级别的密钥访问器来访问其特定格式的基础公钥。例如:
RSA *rsapubkey = EVP_PKEY_get1_RSA(pubkey);
if (NULL != rsapubkey) {
printf("This cert has an RSA public key\n");
/* Do your stuff with the RSA key, for example using RSA_get0_key()
for current versions of OpenSSL, or directly access the fields
rsapubkey->n and rsapubkey->e for older versions */
RSA_free(rsapubkey);
}
如果基础密钥不是 RSA 密钥,则该函数EVP_PKEY_get1_RSA()
返回。NULL
否则,您可以使用它来访问模数 ( n
) 和指数 ( e
),这基本上是您“保存”它所需的全部内容。或者您可以保留rsapubkey
,因为它包含所有公钥信息。当你RSA_free()
完成时,你必须这样做。
同样,EVP_PKEY_get1_EC_KEY()
如果您期望 EC 密钥,您可以使用。
推荐阅读
- javascript - 如何根据所选选项在数据库 MySQL 的文本框中显示数据?
- webrtc - UFW 端口转发不适用于我的 coturn 设置
- vscode-extensions - 从 Azure Data Studio 扩展中执行 SQL?
- java - 无法解析符号“响应”
- python - 不理解 OpenCV GitHub Wiki 的“TensorFlow 对象检测”
- c - 如何在stm32 cube IDE中的main函数之前开始调试
- reactjs - 我的 api 函数在另一个文件或目录中我想在 react native 的另一个文件或目录中检查我的 api 响应数据
- python-3.x - 从顺序 API 模型转换为功能 API 模型
- javascript - 如何从本地存储项创建单独的列表项并将它们显示在待办事项列表中?
- flutter - 在 listView 中给出特定数字时出错