首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++/OpenSSL中存储私钥和证书

在C++/OpenSSL中存储私钥和证书
EN

Stack Overflow用户
提问于 2018-05-31 21:18:29
回答 1查看 1.2K关注 0票数 0

我需要将证书及其私钥存储在内存中。证书可以采用以下4种格式: PEM、PKCS12、PKCS7、DER。我需要稍后将它们写回为PEM。

我看到的所有代码片段都只在X509结构中存储公共证书。那私密的部分呢?

我找到了一种使用X509_INFO的方法,但是我遇到了一个主要问题:我还没有找到从DER/PKCS7/PKCS12文件中获取X509_INFO的方法

目前,我得到了以下代码:

代码语言:javascript
复制
    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,如下所示:

代码语言:javascript
复制
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中输出私有和公共部分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 06:13:45

PKCS7仅适用于公钥。DER和PEM只是对PKCS (和许多其他)对象进行编码的简单方法。由于您希望将所有内容存储到单个结构中,因此您可能会从PKCS12中获得最大的好处。OpenSSL provides functions to parse PKCS12 data,并从中获取证书和密钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50625312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档