c++ openssl API 从内存中读取 PEM 的内容

创建日期: 2023-06-13 17:52 | 作者: 风波 | 浏览次数: 16 | 分类: C++

来源:chatGPT

#include <iostream>
#include <openssl/pem.h>
#include <openssl/x509.h>
#include <openssl/x509_vfy.h>

int main() {
    const char* caCertPem = "-----BEGIN CERTIFICATE-----\n"
                            "CA certificate data here\n"
                            "-----END CERTIFICATE-----";

    // 创建X509_STORE结构体
    X509_STORE* caStore = X509_STORE_new();
    if (caStore == nullptr) {
        std::cerr << "Failed to create X509_STORE" << std::endl;
        return 1;
    }

    // 将PEM文本读取到BIO中
    BIO* bio = BIO_new_mem_buf(caCertPem, -1);
    if (bio == nullptr) {
        std::cerr << "Failed to create BIO" << std::endl;
        X509_STORE_free(caStore);
        return 1;
    }

    // 从BIO中读取X509证书
    X509* caCert = PEM_read_bio_X509(bio, nullptr, nullptr, nullptr);
    if (caCert == nullptr) {
        std::cerr << "Failed to read CA certificate from PEM" << std::endl;
        BIO_free(bio);
        X509_STORE_free(caStore);
        return 1;
    }

    // 将CA证书添加到X509_STORE中
    if (X509_STORE_add_cert(caStore, caCert) != 1) {
        std::cerr << "Failed to add CA certificate to X509_STORE" << std::endl;
        X509_free(caCert);
        BIO_free(bio);
        X509_STORE_free(caStore);
        return 1;
    }

    // 清理资源
    X509_free(caCert);
    BIO_free(bio);

    // 在此处可以继续使用X509_STORE对象进行后续操作,如证书验证等

    // 释放X509_STORE对象
    X509_STORE_free(caStore);

    return 0;
}
16 浏览
14 爬虫
0 评论