2016-07-26 8 views

ответ

2

В OpenSSL нет доступных вспомогательных функций для этого. Похоже, что единственный способ добиться того, чего вы хотите, - разобрать строку и создать элементы X509_NAME_ENTRY один за другим. Вы можете использовать strsep для этого, в результате чего-то вроде этого кода (который не выполняет никакой проверки ошибок и ошибок, в связи с изменениями в формате имя):

#define TEST_NAME "CN=CA1, O=DEVANG" 

X509_NAME *x509name = X509_NAME_new(); 
char *x509nameString = strdup(TEST_NAME); 
char *toFree = x509nameString; 
char *x509nameEntryString = strsep(&x509nameString, ","); 
char *x509nameEntryTypeString; 
char *x509nameEntryValueString; 

while (NULL != x509nameEntryString) { 
    x509nameEntryValueString = x509nameEntryString; 
    x509nameEntryTypeString = strsep(&x509nameEntryValueString, "="); 
    X509_NAME_add_entry_by_txt(x509name, x509nameEntryTypeString, 
     MBSTRING_ASC, x509nameEntryValueString, -1, -1, 0); 
    /* Need to skip spaces */ 
    while ((NULL != x509nameString) && 
     (' ' == *x509nameString)) { 
    x509nameString = &x509nameString[1]; 
    } 
    x509nameEntryString = strsep(&x509nameString, ","); 
} 

/* See the result, just FYI */ 
X509_NAME_print_ex_fp(stdout, x509name, 0, XN_FLAG_ONELINE); 

free(toFree); 

Для сравнения двух X509_NAME экземпляров, функция X509_NAME_cmp().

Я надеюсь, что у кого-то есть лучший ответ ...