我有一个。net 5.0应用程序需要从Azure密钥库下载证书:
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机器上运行得很好,但是当我试图在苹果机器上运行它时,我得到以下错误:
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)
我在这里读到这是因为苹果和Windows处理X.509证书的方式不同,在苹果电脑上,没有密码的证书会导致抛出错误,但在Windows机器上不会抛出错误。这似乎是我的问题,但我不想使用这个来源建议的解决方案。是否有一种方法可以在不修改证书的情况下使其需要密码?
macOS无法加载带有NULL密码或错误密码的PFX。
如果你有一个pkcs# 12文件,没有密码保护,它有一个MAC条目,打开该文件将在Windows和Linux上工作,但在MAC上失败。
所以,虽然这是一个bug,但如果没有一个非常有说服力的论据,我们可能不会在。net中解决它(比如它是政府CA的密钥分发模型,或者类似的东西);而是一些理想情况下由苹果解决的问题。您可以使用此链接(https://bugreport.apple.com/,用于SecItemImport)报告相同的内容。
还有一个可用的解决方案,即代码可以作为基于BouncyCastle的解决方案
X509Certificate2/CommonCrypto:无法打开没有密码和有效MAC的pkcs# 12文件·Issue #23635·dotnet/runtime·GitHub