У меня есть имя сертификата CA в CN=CA1, O=DEVANG
. Я хочу конвертировать в X509_NAME
формат.преобразование имени субъекта в формат x509_name
Есть ли какие-либо API-интерфейсы, которые помогут мне преобразовать его? Как я могу сравнить?
У меня есть имя сертификата CA в CN=CA1, O=DEVANG
. Я хочу конвертировать в X509_NAME
формат.преобразование имени субъекта в формат x509_name
Есть ли какие-либо API-интерфейсы, которые помогут мне преобразовать его? Как я могу сравнить?
В 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()
.
Я надеюсь, что у кого-то есть лучший ответ ...
Ответили ниже, на ваш вопрос? –