我需要将证书及其私钥存储在内存中。 证书可以采用以下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
而pkey是EVP_PKEY
...
如果无法将其存储为单个结构,是否可以将我的证书存储为X509
+ EVP_PKEY
作为私钥,并仍然输出私有和公共部分在PEM
?
答案 0 :(得分:0)
PKCS7仅适用于公钥。 DER和PEM是编码PKCS(和许多其他)对象的简单方法。由于您希望将所有内容存储到单个结构中,因此您可能最大程度地受益于PKCS12。 OpenSSL provides functions to parse PKCS12 data并获取证书和密钥。