Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline boa85  
#1 Оставлено : 17 февраля 2019 г. 20:59:46(UTC)
boa85

Статус: Новичок

Группы: Участники
Зарегистрирован: 16.02.2019(UTC)
Сообщений: 5

Добрый вечер. Собственно проблема: нужно конвертировать в ASN.1 строку. На вход приходит, конкретно в моем случае, информация об издателе сертификата.
Код:

issuer:CN="Тестовый УЦ ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", C=RU, EMAILADDRESS=info@cryptopro.ru, L=Москва, ST=77 г. Москва, STREET="ул. Сущёвский вал, д. 18", OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434

Все бы ничего, но кавычки \"КРИПТО-ПРО\"", будь они не ладны. В официальной документации сказано:
Цитата:
Quotation marks ("") are supported. A quotation can be included in a quoted value by using two sets of quotation marks, for example, CN="User ""one""".

Однако, или я дурак, или лыжи не едут, но не работает. Если добавить в параметры флаг [CPP]CERT_NAME_STR_NO_QUOTING_FLAG[/CPP], то падает на STREET. Ну собственно код конвертера ниже, но он ничего нового не дает ;(
Код:

using ByteArray = std::vector<uint8_t>;
static ByteArray string2asn1(LPCSTR pszString, int str_type)
{
	ByteArray result;
	DWORD cbSize;
	CERT_NAME_BLOB blobEncodedIssuerName;


	if (!(CertStrToNameA(
		MY_ENCODING_TYPE,
		pszString,
		str_type,
		NULL,
		NULL,
		&cbSize,
		NULL)))
	{
		std::cout << "\nCould not get the length of the BLOB.\n";
		return  result;
	}

	if (!(blobEncodedIssuerName.pbData = (LPBYTE)malloc(cbSize)))
	{
		std::cout << "\nMemory Allocation for the BLOB failed.\n";
		return  result;
	}
	blobEncodedIssuerName.cbData = cbSize;

	if (!(CertStrToNameA(
		MY_ENCODING_TYPE | CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG,
		pszString,
		str_type,
		NULL,
		blobEncodedIssuerName.pbData,
		&blobEncodedIssuerName.cbData,
		NULL)))
	{
		std::cout << "\nCould not write the blob.\n";
		return  result;
	}
	return ByteArray(blobEncodedIssuerName.pbData, blobEncodedIssuerName.pbData + blobEncodedIssuerName.cbData);
}// string2asn1
Offline Кирилл Соболев  
#2 Оставлено : 18 февраля 2019 г. 14:05:33(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Здравствуйте.
Экранируйте (удваивайте) кавычки в соответствии с документацией.
Т.е.
Код:

CN="Тестовый УЦ ООО \"\"КРИПТО-ПРО\"\"\", O=\"ООО \"\"КРИПТО-ПРО\"\"", C=RU

Техническую поддержку оказываем тут
Наша база знаний
Offline boa85  
#3 Оставлено : 19 февраля 2019 г. 20:53:12(UTC)
boa85

Статус: Новичок

Группы: Участники
Зарегистрирован: 16.02.2019(UTC)
Сообщений: 5

Благодарю. Разобрался.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.