【问题标题】:X509* certificate serialization and deserialization in CX509* C 中的证书序列化和反序列化
【发布时间】:2013-05-08 17:47:51
【问题描述】:

我有一个 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);

哪里 data 应该有证书数据!

要从数据缓冲区重建 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 应该在哪里获得证书。这不能正常工作,有人可以给我一个很好的例子吗?

【问题讨论】:

标签: c openssl certificate x509


【解决方案1】:

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

1 使用 BIO_read_filename 将证书加载到 BIO

2 使用 PEM_read_bio_X509_AUX 将其转换为 x509

3 使用i2d_X509将其转换为无符号字符*

4 使用 d2i_X509 从 unsigned char* 重构 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;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 2014-01-06
    • 2012-02-02
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多