Erro "PKCS12 (PFX) sem uma senha fornecida excedeu o máximo de iterações permitidas" na integração fiscal
Este artigo fornece uma solução para um erro que ocorre em um processo de integração fiscal no Microsoft Dynamics 365 Commerce.
Sintomas
Em um processo de registro fiscal, ao tentar enviar uma nota fiscal, você recebe a seguinte mensagem de erro:
PKCS12 (PFX) sem uma senha fornecida excedeu o máximo de iterações permitidas. Consulte https://go.microsoft.com/fwlink/?linkid=2233907 (abre em nova janela ou guia) para obter mais informações.
Solução
Pré-requisitos
Antes de explorar o problema, você deve saber qual tipo de certificado tem suporte em seu cenário.
- Se o POS estiver sendo executado no modo offline, somente certificados locais serão suportados.
- Para a CSU (Commerce Scale Unit) (nuvem), há suporte apenas para certificados do Azure Key Vault .
- Para CSU auto-hospedada, há suporte para certificados do Azure Key Vault e do armazenamento local.
Exportar um certificado PFX sem uma senha
Se os certificados do Azure Key Vault forem usados para assinatura digital, os certificados carregados no Azure Key Vault deverão conter a chave privada e não ter uma senha.
Se você exportar o certificado usando o Assistente de Exportação de Certificado, um formato de certificado PFX (troca de informações pessoais) deverá ser selecionado e você será solicitado a inserir uma senha. No entanto, não há suporte para certificados com senhas para assinatura digital no Microsoft Dynamics 365 Commerce. Execute o seguinte script para remover a senha de um certificado 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)