Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.05.2014(UTC) Сообщений: 35 Откуда: Москва Сказал(а) «Спасибо»: 2 раз
|
Работаю из кода с сертификатами, нужно экспортировать файл pfx Такой код генерирует pfx, но генерирует его без закрытого ключа Код:
try
{
Marshal.StructureToPtr(data, pfx, false);
if (!WinCrypt32.PFXExportCertStoreEx(store, pfx, passwordPfx, IntPtr.Zero,
WinCrypt32.EXPORT_PRIVATE_KEYS /*| WinCrypt32.PKCS12_INCLUDE_EXTENDED_PROPERTIES |
WinCrypt32.REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY | WinCrypt32.REPORT_NO_PRIVATE_KEY*/))
{
Log.Warn("Не удалось выполнить экспорт pfx, Ошибка {0}", Marshal.GetLastWin32Error());
return null;
}
if (data.pbData != IntPtr.Zero)
{
var buffer = new byte[data.cbData];
Marshal.Copy(data.pbData, buffer, 0, (int)data.cbData);
Log.Trace("Сформирован PFX файл");
return buffer;
}
Log.Warn("Сформировать PFX файл не удалось");
return null;
}
finally
{
Marshal.FreeHGlobal(data.pbData);
}
Такой код генерирует PFX c закрытым ключем Код:
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySerialNumber, "48685f008fabc7b041536dab124ef2f3", false)[0];
var s = certs.Export(X509ContentType.Pkcs12, "1");
Но он привод к появлению окна ввода пароля Как из кода или установить пароль или сохранить пароль на контейнер Консольная утилита certmgr.exe -export -pfx -dest "c:\temp\1\cert.pfx" -pin 1 также запрашивает пароль на контейнер Версия КриптоПро CSP 4.0.9963 Отредактировано пользователем 31 марта 2020 г. 13:43:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,374 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 704 раз в 613 постах
|
Продублирую ответ из почты: Параметр -pin и второй параметр в методе Export задают пароль для результирующего pfx, а не для исходного контейнера. Задачу можно решить, добавив пин-код в ссылку на ключ сертификат в параметры PCRYPT_KEY_PROV_PARAM в CRYPT_KEY_PROV_INFO Код: size_t dwLen = strlen(szPassword) + 1;
stProvInfo.cProvParam = 1;
stProvInfo.rgProvParam = &key_prov_param;
key_prov_param.dwFlags = 0;
key_prov_param.dwParam = PP_KEYEXCHANGE_PIN;
key_prov_param.pbData = (BYTE *) szPassword;
key_prov_param.cbData = (DWORD)dwLen;
Тогда при экспорте вызовется CryptAcquireCertificatePrivateKey и пин-код применится. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close