"PKCS12 (PFX) без предоставленного пароля превысило максимально допустимое количество итераций" ошибки в фискальной интеграции
В этой статье представлено решение для ошибки, возникающей в процессе интеграции с бюджетом в Microsoft Dynamics 365 Commerce.
Симптомы
При попытке отправить финансовый документ при попытке отправить финансовый документ вы получите следующее сообщение об ошибке:
PKCS12 (PFX) без предоставленного пароля превысил максимально допустимые итерации. Дополнительные сведения см. в разделе https://go.microsoft.com/fwlink/?linkid=2233907 (Открывается в новом окне или вкладке).
Решение
Предварительные требования
Прежде чем изучить проблему, следует знать, какой тип сертификатов поддерживается в вашем сценарии.
- Если POS работает в автономном режиме, поддерживаются только локальные сертификаты.
- Для единицы масштабирования коммерции (CSU) (облако) поддерживаются только сертификаты из Azure Key Vault .
- Для локальной службы CSU поддерживаются сертификаты из Azure Key Vault и локального хранилища.
Экспорт сертификата PFX без пароля
Если сертификаты из Azure Key Vault используются для цифровой подписи, сертификаты, отправленные в Azure Key Vault, должны содержать закрытый ключ и не иметь пароля.
При экспорте сертификата с помощью мастера экспорта сертификатов необходимо выбрать формат сертификата обмена персональными данными (PFX), и вам будет предложено ввести пароль. Однако сертификаты с паролями не поддерживаются для цифрового входа в Microsoft Dynamics 365 Commerce. Выполните следующий скрипт, чтобы удалить пароль из сертификата PFX:
$pfxFilePath = '<Localpath of the pfx certificate>'
$pwd = '<Password of the pfx certificate>'
$collection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$collection.Import($pfxFilePath, $pwd, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pkcs12ContentType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12
$certBytes = $collection.Export($pkcs12ContentType)
[System.IO.File]::WriteAllBytes($pfxFilePath, $certBytes)