【问题标题】:Store a private key and a certificate in C++/OpenSSL在 C++/OpenSSL 中存储私钥和证书
【发布时间】:2018-11-10 12:38:19
【问题描述】:

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

我看到的所有 sn-ps 都只将公共证书存储在 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 作为私钥,并且仍然在 @987654330 中输出私有和公共部分@?

【问题讨论】:

    标签: c++ openssl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 2011-11-09
      • 1970-01-01
      • 2012-10-25
      • 2013-05-30
      • 2011-10-16
      • 2022-12-18
      • 2019-03-26
      • 2019-12-06
      相关资源
      最近更新 更多