Функция PFXExportCertStoreEx (wincrypt.h)

Функция PFXExportCertStoreEx экспортирует сертификаты и, если они доступны, связанные с ними закрытые ключи из хранилища сертификатов, на который указывает ссылка. Эта функция заменяет старую функцию PfxExportCertStore . Его следует использовать для повышения безопасности закрытого ключа. Большой двоичный объект PFX, созданный этой функцией, защищен паролем.

Синтаксис

BOOL PFXExportCertStoreEx(
  [in]      HCERTSTORE      hStore,
  [in, out] CRYPT_DATA_BLOB *pPFX,
  [in]      LPCWSTR         szPassword,
  [in]      void            *pvPara,
  [in]      DWORD           dwFlags
);

Параметры

[in] hStore

Дескриптор хранилища сертификатов, содержащего экспортируемые сертификаты.

[in, out] pPFX

Указатель на структуру CRYPT_DATA_BLOB для хранения пакета PFX с экспортируемыми сертификатами и ключами. Если pPFX-pbData> имеет значение NULL, функция вычисляет количество байтов, необходимое для закодированного большого двоичного объекта, и возвращает его в pPFX-cbData.> При вызове функции с pPFX-pbData>, указывающей на выделенный буфер необходимого размера, функция копирует закодированные байты в буфер и обновляетpPFX-cbData> длиной байтов кодирования.

[in] szPassword

Строковый пароль, используемый для шифрования и проверки пакета PFX. Завершив использование пароля, очистите пароль из памяти, вызвав функцию SecureZeroMemory . Дополнительные сведения о защите паролей см. в разделе Обработка паролей.

[in] pvPara

Этот параметр должен иметь значение NULL , если параметр dwFlags не содержит PKCS12_PROTECT_TO_DOMAIN_SIDS или PKCS12_EXPORT_PBES2_PARAMS. Поэтому перед Windows 8 и Windows Server 2012 этот параметр должен иметь значение NULL.

Начиная с Windows 8 и Windows Server 2012, если параметр dwFlags содержит PKCS12_PROTECT_TO_DOMAIN_SIDS, можно задать для параметра pvPara значение NCRYPT_DESCRIPTOR_HANDLE, чтобы определить, к какому субъекту Active Directory будет защищен пароль PFX внутри большого двоичного объекта PFX. В настоящее время пароль можно защитить для пользователя, компьютера или группы Active Directory. Дополнительные сведения об дескрипторов защиты см. в разделе NCryptCreateProtectionDescriptor.

Начиная с Windows 10 1709 (Fall Creators Update) и Windows Server 2019, если параметр dwFlags содержит PKCS12_EXPORT_PBES2_PARAMS, следует задать для параметра pvParaзначение PKCS12_EXPORT_PBES2_PARAMS, чтобы выбрать используемый алгоритм шифрования на основе пароля.

[in] dwFlags

Для значений флагов можно задать любое сочетание следующих значений.

Значение Значение
EXPORT_PRIVATE_KEYS
0x0004
Закрытые ключи экспортируются, а также сертификаты.
REPORT_NO_PRIVATE_KEY
0x0001
При обнаружении сертификата, не связанного с закрытым ключом, функция возвращает значение FALSE с последней ошибкой CRYPT_E_NOT_FOUND или NTE_NO_KEY.
REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY
0x0002
При обнаружении сертификата с неэкспортируемым закрытым ключом функция возвращает значение FALSE, а для последней ошибки задано значение NTE_BAD_KEY, NTE_BAD_KEY_STATE или NTE_PERM.
PKCS12_INCLUDE_EXTENDED_PROPERTIES
0x0010
Экспортируйте все расширенные свойства сертификата.

Windows Server 2003 и Windows XP: Это значение не поддерживается.

PKCS12_PROTECT_TO_DOMAIN_SIDS
0x0020
Большой двоичный объект PFX содержит внедренный пароль, который будет защищен дескриптором защиты Active Directory (AD), на который указывает параметр pvPara . Если параметр szPassword не равен NULL или пуст, указанный пароль защищен. Однако если параметр szPassword имеет значение NULL или пустую строку, создается и защищается случайный пароль из 40 символов.

PFXImportCertStore использует указанный дескриптор защиты для расшифровки внедренного пароля, заданного пользователем или случайно созданного, а затем использует пароль для расшифровки большого двоичного объекта PFX.

Windows 8 и Windows Server 2012: начинается поддержка этого флага.

PKCS12_EXPORT_PBES2_PARAMS
0x0080
Экспорт с помощью алгоритма шифрования на основе passowrd, заданного значением PKCS12_EXPORT_PBES2_PARAMS , переданным как pvPara.

Windows 10 1709 (Fall Creators Update) и Windows Server 2019: поддержка этого флага начинается.

Возвращаемое значение

Возвращает значение TRUE (ненулевое), если функция выполнена успешно, и FALSE (ноль), если функция завершается сбоем. Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Комментарии

Начиная с Windows 8 и Windows Server 2012, вы можете защитить пароль PFX для пользователя, компьютера или группы Active Directory. Если вы решили сделать это, но не создаете пароль, временный пароль будет выбран случайным образом. Пароль шифруется с помощью субъекта Active Directory, а затем внедряется в большой двоичный объект PFX. Дополнительные сведения см. в разделе параметр pvPara и флаг PKCS12_PROTECT_TO_DOMAIN_SIDS .

Начиная с Windows 10 1709 (Fall Creators Update) и Windows Server 2019, вы можете управлять количеством итераций хэш-функции по паролю, выполненной функцией PFXExportCertStoreEx, с помощью следующего раздела реестра. Значение в этом ключе имеет тип REG_DWORD.

HKEY_LOCAL_MACHINE\Программного обеспечения\Microsoft\Windows\CurrentVersion\PFX\PasswordIterationCount

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

PFXExportCertStore

PFXImportCertStore