AppleCommonCryptoCryptographicException - MAC 验证失败 - 从 keyvault 下载 X.509 证书时密码错误

AppleCommonCryptoCryptographicException - MAC verification failed - wrong password when downloading X.509 cert from keyvault

我有一个 .NET 5.0 应用程序需要从 Azure keyvault 下载证书:

static X509Certificate2 DownloadCertificate(Secret secret) {
    KeyVaultSecret key = new Provider(secret.KeyVaultName).GetSecretAsync(secret.SecretName).Result;
    return new X509Certificate2(Convert.FromBase64String(key.Value), 
        string.Empty, X509KeyStorageFlags.UserKeySet);
}

这在我的 Windows 机器上运行良好,但是当我尝试在 Apple 机器上 运行 它时,出现以下错误:

Interop.AppleCrypto.AppleCommonCryptoCryptographicException : MAC verification failed during PKCS12 import (wrong password?)
at Interop.AppleCrypto.X509ImportCertificate(Byte[] bytes, X509ContentType contentType, SafePasswordHandle importPassword, SafeKeychainHandle keychain, Boolean exportable, SafeSecIdentityHandle& identityHandle)
at Internal.Cryptography.Pal.CertificatePal.FromBlob(Byte[] rawData, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData)

我读到 here 这是因为 Apple 和 Windows 处理 X.509 证书的方式不同,因此在 Apple 计算机上,没有密码的证书会导致错误被抛出,但在 Windows 机器上不会抛出错误。这似乎是我的问题,但我不想使用此来源建议的解决方案。有没有办法在不修改证书的情况下使它工作,以至于它需要密码?

macOS 无法加载 MACd 使用 NULL 密码或错误密码的 PFX。

如果您有一个不受密码保护的 PKCS#12 文件,并且确实有一个 MAC 条目,打开该文件将适用于 Windows 和 Linux但在 Mac.

上失败

因此,虽然这是一个错误,但如果没有非常有说服力的论据(比如它是政府 CA 的密钥分发模型,或类似的东西),我们可能不会在 .NET 中解决它;而是理想情况下由 Apple 解决的问题。您可以使用此 link (https://bugreport.apple.com/, for SecItemImport).

报告相同内容

还有一个可用的解决方法,即可以作为基于 BouncyCastle 的解决方法的代码

请参考这个link:X509Certificate2/CommonCrypto: Unable to open PKCS#12 files with no password and valid MAC · Issue #23635 · dotnet/runtime · GitHub