Błąd "PKCS12 (PFX) bez podanego hasła przekroczył maksymalną dozwoloną iterację" w integracji fiskalnej
Ten artykuł zawiera rozwiązanie błędu występującego w procesie integracji fiskalnej w usłudze Microsoft Dynamics 365 Commerce.
Symptomy
W procesie rejestracji fiskalnej podczas próby przesłania dokumentu fiskalnego zostanie wyświetlony następujący komunikat o błędzie:
PKCS12 (PFX) bez podanego hasła przekroczyła maksymalną dozwoloną iterację. Aby uzyskać więcej informacji, zobacz https://go.microsoft.com/fwlink/?linkid=2233907 (Otwiera się w nowym oknie lub karcie).
Rozwiązanie
Wymagania wstępne
Przed zbadaniem problemu należy wiedzieć, który typ certyfikatów jest obsługiwany w danym scenariuszu.
- Jeśli system zakupu działa w trybie offline, obsługiwane są tylko certyfikaty lokalne.
- W przypadku jednostki skalowania handlu (CSU) (w chmurze) obsługiwane są tylko certyfikaty z usługi Azure Key Vault .
- W przypadku własnych jednostek CSU obsługiwane są certyfikaty zarówno z usługi Azure Key Vault, jak i magazynu lokalnego.
Eksportowanie certyfikatu PFX bez hasła
Jeśli certyfikaty z usługi Azure Key Vault są używane do podpisywania cyfrowego, certyfikaty przekazane do usługi Azure Key Vault powinny zawierać klucz prywatny i nie mają hasła.
W przypadku wyeksportowania certyfikatu przy użyciu Kreatora eksportu certyfikatów należy wybrać format certyfikatu wymiany informacji osobistych (PFX) i zostanie wyświetlony monit o wprowadzenie hasła. Jednak certyfikaty z hasłami nie są obsługiwane w przypadku logowania cyfrowego w usłudze Microsoft Dynamics 365 Commerce. Uruchom następujący skrypt, aby usunąć hasło z certyfikatu 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)