将私钥和证书存储在C++/OpenSSL中
Store a private key and a certificate in C++/OpenSSL
我需要将证书及其私钥存储在内存中。 证书可以采用以下 4 种格式:PEM、PKCS12、PKCS7、DER。 我以后需要将它们写回为 PEM。
我看到的所有代码片段都只将公共证书存储在X509
结构中。 呢?
我找到了一种使用X509_INFO
的方法,但我遇到了一个主要问题: 我还没有找到从 DER/PKCS7/PKCS12 文件中获取X509_INFO
的方法
目前我得到了以下代码:
QList<X509_INFO*>* Certificat::stringPEMToX509_INFO(QString stringPem)
{
QList <X509_INFO*>* liste_certificats = new QList<X509_INFO*>;
STACK_OF(X509_INFO)* pile_certificats = NULL;
X509_INFO* certificat;
BIO* bio = BIO_new(BIO_s_mem());
const char* pem = stringPem.toAscii().constData();
BIO_puts(bio, pem);
//https://github.com/openssl/openssl/blob/master/crypto/pem/pem_info.c
pile_certificats = PEM_X509_INFO_read_bio(bio, NULL, NULL, NULL);
for (int i = 0; i < sk_X509_INFO_num(pile_certificats); i++)
{
certificat = sk_X509_INFO_value(pile_certificats, i);
liste_certificats->push_back(certificat);
}
sk_X509_INFO_pop_free(pile_certificats, X509_INFO_free);
BIO_free_all(bio);
return liste_certificats;
}
我的目标是具有相同的功能,但对于 DER、PKCS12 和 PKCS7。
我试图从 DER 获取这样的X509_INFO:
p12 = d2i_PKCS12_bio(bio, NULL);
certificat = X509_INFO_new();
certificat->x509 = cert;
certificat->x_pkey = pkey;
但是x_pkey是一个X509_PKEY
,一个EVP_PKEY
......如果无法将其存储为单个结构,是否可以将我的证书存储为私钥的X509
+EVP_PKEY
,并且仍然在PEM
中同时输出私有和公共部分?
PKCS7 仅适用于公钥。DER 和 PEM 只是对 PKCS(和许多其他(对象进行编码的方法。由于您希望将所有内容存储到单个结构中,因此您可能最能从 PKCS12 中受益。OpenSSL 提供了解析 PKCS12 数据并从中获取证书和密钥的函数。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 如何在openssl-ecc中获取十六进制格式的私钥
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- OpenSSL TLS服务器-使用客户端证书白名单
- 通过 Openssl 命令行加密,通过 c++ 解密
- 使用已使用 java 编码的 openssl 解码数据
- OpenSSL没有共享密码
- OpenSSL 解密功能无法正常工作
- OpenSSL BIO and SSL_read
- 如何在OpenSSL库的名称中添加后缀'd'?
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- 在 C/C++ 中加载 OpenSSL 自定义引擎
- 我的应用程序无法在安卓上使用OpenSSL进行链接
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 比较两个公钥与OpenSSL API