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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline stank12  
#1 Оставлено : 26 мая 2023 г. 9:31:20(UTC)
stank12

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

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

Пререквизиты:
- докер контейнер, базовый образ mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim (debian 11),
- .net6

Версии пакетов криптопро:
cprocsp-curl-64 5.0.12000-6
cprocsp-pki-cades-64 2.0.14660-1
lsb-cprocsp-base 5.0.12000-6
lsb-cprocsp-ca-certs 5.0.12000-6
lsb-cprocsp-capilite-64 5.0.12000-6
lsb-cprocsp-devel 5.0.12000-6
lsb-cprocsp-kc1-64 5.0.12000-6
lsb-cprocsp-rdr-64 5.0.12000-6

Сертификат получен на сайте Тестового УЦ (http://testgost2012.cryptopro.ru/certsrv/certrqma.asp)
Экспорт производится командой certmgr -export -pfx -dest test.pfx -pin password (в хранилище my на момент экспорта только один сертификат со связанным приватным ключом).


Проблема:
Нужно проверять пароль к .pfx при перед импортом содержимого. Для этого использую функцию PFXVerifyPassword. На пустом пароле проверка работает исправно. Но если пароль установлен, то при проверке получаю ошибку (код 86, The specified network password is not correct). Есть подозрение, что что-то не то с маршаллингом, перепробовал различные варианты и их комбинации:
- указывал различные Charset'ы
- передавал IntPtr на строку с использованием функций Marshal.StringToHGlobalAnsi()/ Marshal.StringToHGlobalUni()/ Marshal.StringToHGlobalAuto()
- передавал IntPtr через SafePasswordHandle.DangerousGetHandle()

Сигнатура такая на текущий момент (тип поля szPassword менялся соответственно при изменении способа передачи параметра в функцию):
Код:
 
[DllImport("libcapi20.so", CharSet = CharSet.Auto, EntryPoint = "PFXVerifyPassword", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PFXVerifyPassword(
            [In] ref DATA_BLOB pPfx,
            [In, MarshalAs(UnmanagedType.LPWStr)] string szPassword,
            [In] uint dwFlags = 0);


Проверка на то, что это действительно валидный pfx, проходит (вызов функции PFXIsPFXBlob()).


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