Errore "PKCS12 (PFX) senza password fornita ha superato il numero massimo consentito di iterazioni" nell'integrazione fiscale
Questo articolo fornisce una soluzione per un errore che si verifica in un processo di integrazione fiscale in Microsoft Dynamics 365 Commerce.
Sintomi
In un processo di registrazione fiscale , quando si tenta di inviare un documento fiscale, viene visualizzato il messaggio di errore seguente:
PKCS12 (PFX) senza una password fornita ha superato il numero massimo di iterazioni consentite. Per altre informazioni, vedere https://go.microsoft.com/fwlink/?linkid=2233907 (Apre in una nuova finestra o scheda).
Risoluzione
Prerequisiti
Prima di esplorare il problema, è necessario sapere quale tipo di certificati è supportato nello scenario.
- Se IL POS è in esecuzione in modalità offline, sono supportati solo i certificati locali.
- Per Commerce Scale Unit (CSU) (cloud), sono supportati solo i certificati di Azure Key Vault.
- Per la CSU self-hosted, sono supportati i certificati sia da Azure Key Vault che dall'archiviazione locale.
Esportare un certificato PFX senza password
Se i certificati di Azure Key Vault vengono usati per la firma digitale, i certificati caricati in Azure Key Vault devono contenere la chiave privata e non avere una password.
Se si esporta il certificato usando l'Esportazione guidata certificati, è necessario selezionare un formato di certificato PFX (Personal Information Exchange) e verrà richiesto di immettere una password. Tuttavia, i certificati con password non sono supportati per l'accesso digitale Microsoft Dynamics 365 Commerce. Eseguire lo script seguente per rimuovere la password da un certificato 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)