【发布时间】:2019-02-12 02:44:12
【问题描述】:
我正在尝试将 X509 证书写入内存中的 DER 格式。 将其写入文件非常有效。
我需要没有“-----BEGIN PRIVATE KEY-----”页眉、页脚或换行符的 PEM 格式的证书。我无法弄清楚如何直接做到这一点...... 我正在输出到 der 和 base64 编码。
这行得通。
int X509_to_DER_file(X509 *cert) {
int res=0;
out = BIO_new(BIO_s_file());
if (NULL != out) {
if(BIO_write_filename(out, "my.der") > 0) {
res = i2d_X509_bio(out, cert);
}
BIO_free_all(out);
}
return (tres);
}
这不是。 它返回并分配正确的字节数,并且似乎正确地写入内存,但结果字符串不正确(前 15 个左右的位置是正确的)。
char *X509_to_DER_mem(X509 *cert) {
char *der = NULL;
bio = BIO_new(BIO_s_mem());
if (NULL != bio) {
//load cert into bio
if (0 == i2d_X509_bio(bio, cert)) {
BIO_flush(bio);
BIO_free(bio);
return NULL;
}
der = (char *) malloc(bio->num_write + 1);
if (NULL == der) {
BIO_free(bio);
return NULL;
}
memset(der, 0, bio->num_write + 1);
BIO_read(bio, der, bio->num_write);
// Appears to work put "der" is incomplete.
BIO_free(bio);
}
return der;
}
【问题讨论】:
-
查看
BIO_read的返回值 -
顺便说一句,我不认为你应该直接使用 BIO 的内部字段。它应该是一个不透明的类型。
-
bio是某种全球性的吗?