c - C 中的 X509* 证书序列化和反序列化

标签 c openssl certificate x509

我有一个 509* 格式的证书,我想将它序列化到一个字符缓冲区中,然后在其他缓冲区中反序列化它以再次恢复证书 509*。

我这样做是为了序列化:

int size_cert = 0;
unsigned char* data;
BIO* bio = BIO_new(BIO_s_mem());
PEM_write_bio_X509(bio,certificate);
size_cert = BIO_get_mem_data(bio, &data);
BIO_free(bio);

其中数据应该有证书数据!

为了从数据缓冲区重建 X509* 证书,我正在这样做:

    BIO* bio;
    X509* cert;

    bio = BIO_new(BIO_s_mem());
    BIO_puts(bio, data);
    cert = PEM_read_bio_X509(bio, NULL, NULL, NULL);    

cert 应该在哪里获取证书。这不能正常工作,有人可以给我一个很好的例子吗?

最佳答案

我已经用下面的代码完成了,

1 Load certificate to BIO using BIO_read_filename

2 convert it to x509 using PEM_read_bio_X509_AUX

3 convert it to unsigned char* using i2d_X509

4 reconstruct the x509 from unsigned char* using d2i_X509

int main()
{   
    X509 *x509,*x509ser;    
    BIO *certBio = BIO_new(BIO_s_file());   
    char * path = "E:\\share\TempCert.pem"; // certificate path
    int len;
    unsigned char *buf;
    buf = NULL;

    BIO_read_filename(certBio, path); // reading certificate to bio
    x509 = PEM_read_bio_X509_AUX(certBio, NULL, 0, NULL);  //converting to x509  
    len = i2d_X509(x509, &buf);  // converting to unsigned char*
    x509ser = d2i_X509(NULL, &buf, len); // converting back to x509 from unsigned char*

    BIO_free_all(certBio); 
    return 0;
} 

关于c - C 中的 X509* 证书序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447056/

相关文章:

c - 如果没有给出,如何从 argv 或 stdin 中的文件读取?

c - C typedef:参数的类型不完整

c - 在 Linux 上嗅探数据包时过滤网络堆栈中的数据包?

encryption - 将低级 OpenSSL API 迁移到高级 OpenSSL API 所需的建议

windows - OpenSSL在配置文件中找不到distinguished_name

java - 从 PEM 获取私钥

java - PKIX 路径构建失败 : unable to find valid certification path to requested target

c++ - 蛋滴跟踪表

java - 添加自签名证书 OkHttpClient

xcode - iCloud 设置和配置