C - 如何通过 PEM 证书作为i2d_X509的第一个参数



我通过以下方式创建自签名证书:

openssl req -new -x509 -key privkey.pem -out cert.pem -days 1095

如何将 cert.pem 传递给i2d_X509?我需要这样的东西:

 len = i2d_X509(".cert.pem", &buf);

但我的证书在 PEM 文件中..

这是我的代码:(我在 https://www.openssl.org/docs/crypto/d2i_X509.html 中使用了示例)

#include <openssl/x509.h>
#include <stdio.h>
int main(void)
{
    int len,i;
    unsigned char *buf;
    buf = NULL;
    len = i2d_X509((X509*)".cert.pem", &buf);
    if (len < 0){
        printf("error len < 0");
        return -1;
     }
    printf("buf:");
    for (i = 0; i < len ; i++)
        printf("0x%02X", *(buf+i));
    return 0;
}

如何将 cert.pem 传递给i2d_X509?

你没有/不能。您需要使用 PEM_read_bio_X509 读取证书。 PEM_read_bio_X509返回一个X509*。然后你可以把它传递给i2d_X509.

完成后,请务必在指针上调用X509_free

或者,按照菲利普的建议进行操作 - 将其转换为 ASN.1/DER,然后将其与 d2i_X509_fp 一起使用。

另请参阅 OpenSSL 手册页中有关 PEM 读/写函数的信息。

最新更新