2011-01-29 2 views
1

Как преобразовать сертификат (формат PEM/DER) в массив байтов?Преобразование сертификата в байтовый массив

У меня нет файловой системы на моем устройстве и вы хотите использовать на ней клиентский сертификат. Поэтому я хочу скопировать этот сертификат SSL в буфер (unsigned char). У меня есть файл сертификата на моей машине Windows.

Каков правильный способ преобразования сертификата в массив? Простая копия символа будет работать?

Вишал N

+0

Какую библиотеку и компилятор + линкер вы используете? – Rudi

ответ

0

При использовании GCC + гну-BinUtils + OpenSSL, вы можете использовать ld включить файл буквального в программу. Затем вы используете d2i_X509 для разбора литерала в структуру X509.

Первый запуск ld -r -b binary -o cert.crt.o cert.crt (cert.crt ДОЛЖЕН быть в форме DER, я не знаю, является ли .crt правильным расширением для DER).

example.c

#include <openssl/x509.h> 
#include <stdio.h> 

extern unsigned char _binary_cert_crt_start[]; 
extern unsigned char _binary_cert_crt_end[]; 

int main() 
{ 
    X509 *cert; 
    const unsigned char *buf = _binary_cert_crt_start; 
    unsigned const char** inp = &buf; 
    cert = d2i_X509(NULL, inp, _binary_cert_crt_end-_binary_cert_crt_start); 
    printf("%p\n", cert); 
    return !cert; 
} 

Затем скомпилировать эту программу с gcc -o ct example.c cert.crt.o -lcrypto.

1

проверить этот код, объяснения добавляются как комментарии,

1 Загрузите файл в структуру BIO

2 Преобразование его в x509 с помощью PEM_read_bio_X509_AUX

3 Преобразовать X509, неподписанные символ * используя i2d_X509

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

    buf = NULL; 
    BIO_read_filename(certBio, path); 
    x509 = PEM_read_bio_X509_AUX(certBio, NULL, 0, NULL);  /*loading the certificate to x509 structure*/ 
    len = i2d_X509(x509, &buf);  /*loading the certificate to unsigned char buffer*/ 

    /* You can use this buf as BYTE array since BYTE is typedef of unsigned char and len will contain the length(size) of the certificate */ 
    BIO_free_all(certBio); 
    return 0; 
} 

проверьте функции i2d_X509, PEM_read_bio_X509_AUX для получения более подробной информации.

Этот буфер можно использовать для создания структуры PCCERT_CONTEXT.

+0

У меня есть противоположная проблема: как я могу преобразовать массив байтов в сертификат? – Kyrol

Смежные вопросы