Библиотека C++ и OpenSSL: как установить subjectAltName (SAN) из кода?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Библиотека C++ и OpenSSL: как установить subjectAltName (SAN) из кода?

Сообщение Anonymous »

Я пытаюсь создать самозаверяющий запрос с subjectAltName из кода C++ (пытаюсь реализовать динамические самозаверяющие сертификаты, подобные этому, для фактической версии OpenResty, но для subjectAltName нет решения).

Приведите несколько примеров настройки SAN из кода C++/OpenSSL. Я пробую что-то вроде этого:

Код: Выделить всё

    X509_EXTENSION  *ext;
STACK_OF (X509_EXTENSION) * extlist;
char *ext_name = "subjectAltName";
char *ext_value = "DNS:lohsport.com";

extlist = sk_X509_EXTENSION_new_null ();
ext = X509V3_EXT_conf (NULL, NULL, ext_name, ext_value);
if(ext == NULL)
{
*err = "Error creating subjectAltName extension";
goto failed;
}
sk_X509_EXTENSION_push (extlist, ext);

if (!X509_REQ_add_extensions (x509_req, extlist)){
*err = "Error adding subjectAltName to the request";
goto failed;
}
sk_X509_EXTENSION_pop_free (extlist, X509_EXTENSION_free);
Компилируется успешно, но не работает.
Буду благодарен за любую помощь.

ОБНОВЛЕНИЕ
Теперь я пытаюсь работать как в демо selfsing.c библиотеки OpenSSL:

1) Я определил функцию для добавления расширений в CSR:

Код: Выделить всё

int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value)
{
X509_EXTENSION *ex;
ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value);
if (!ex)
return 0;
sk_X509_EXTENSION_push(sk, ex);

return 1;
}
2) Добавьте этот блок в мою функцию, которая генерирует CSR:

Код: Выделить всё

   char Buffer[512];
// Format the value
sprintf (Buffer, "DNS:%s", info->common_name);
xts = sk_X509_EXTENSION_new_null();
add_ext(exts, NID_subject_alt_name, Buffer);

if(X509_REQ_add_extensions(x509_req, exts) != 1) {
*err = "X509_REQ_add_extensions() failed";
goto failed;
}
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
Код снова компилируется корректно, сертификаты генерируются на лету, но альтернативные имена по-прежнему не работают, и в браузере появляется ошибка:

NET::ERR_CERT_COMMON_NAME_INVALID

и я не вижу информации об альтернативном имени в сведениях о сертификате.

Какие еще могут быть решения? проблема с SAN? Я могу предоставить весь код, например, на githab, если это может помочь.

Подробнее здесь: https://stackoverflow.com/questions/543 ... -from-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»