"PKCS12 (PFX) sin una contraseña proporcionada ha superado el error máximo permitido de iteraciones" en la integración fiscal
En este artículo se proporciona una solución para un error que se produce en un proceso de integración fiscal en Microsoft Dynamics 365 Commerce.
Síntomas
En un proceso de registro fiscal, al intentar enviar un documento fiscal, recibirá el siguiente mensaje de error:
PKCS12 (PFX) sin una contraseña proporcionada ha superado las iteraciones máximas permitidas. Consulte https://go.microsoft.com/fwlink/?linkid=2233907 (Se abre en una nueva ventana o pestaña) para obtener más información.
Solución
Requisitos previos
Antes de explorar el problema, debe saber qué tipo de certificados se admite en su escenario.
- Si POS se ejecuta en modo sin conexión, solo se admiten certificados locales.
- En el caso de la unidad de escalado comercial (CSU) (nube), solo se admiten certificados de Azure Key Vault .
- En el caso de CSU autohospedado, se admiten certificados de Azure Key Vault y almacenamiento local.
Exportación de un certificado PFX sin contraseña
Si los certificados de Azure Key Vault se usan para la firma digital, los certificados cargados en Azure Key Vault deben contener la clave privada y no tener una contraseña.
Si exporta el certificado mediante el Asistente para exportar certificados, se debe seleccionar un formato de certificado de intercambio de información personal (PFX) y se le pedirá que escriba una contraseña. Sin embargo, no se admiten certificados con contraseñas para el inicio de sesión digital en Microsoft Dynamics 365 Commerce. Ejecute el siguiente script para quitar la contraseña de un 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)