繁体   English   中英

在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 ,pkey是EVP_PKEY ...

如果没有办法将其存储为单个结构,是否可以将我的证书存储为X509 +私钥的EVP_PKEY ,并且仍然在PEM输出私有和公共部分?

PKCS7仅用于公共密钥。 DER和PEM只是编码PKCS(和许多其他)对象的简单方法。 由于要将所有内容存储在一个结构中,因此您可能会从PKCS12中获得最大的收益。 OpenSSL提供了解析PKCS12数据并从中获取证书和密钥的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM