Я пытаюсь записать сертификат X509 в формат DER в памяти.
Запись его в файл работает отлично.
Мне нужен сертификат в формате PEM без заголовка, нижнего колонтитула или перевода строки "----- BEGIN PRIVATE KEY -----". Я не могу понять, как сделать это напрямую, так что ...
Я вывожу в кодировку 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;
}