X509Certificate2 构造函数抛出磁盘空间不足

2023-12-10

突然之间,无需部署或进行任何其他环境更改,我们就得到了

磁盘空间不足。 在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException (mscorlib,版本=4.0.0.0,文化=中性, 公钥令牌=b77a5c561934e089) 在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob (mscorlib,版本=4.0.0.0,文化=中性, 公钥令牌=b77a5c561934e089) 在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob (mscorlib,版本=4.0.0.0,文化=中性, 公钥令牌=b77a5c561934e089) 在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor (系统,版本=4.0.0.0,文化=中立, 公钥令牌=b77a5c561934e089) 在[我们的准则]

有了这一行:

var certificateByes = Convert.FromBase64String(clientCertificateBody);
factory.Credentials.ClientCertificate.Certificate = new X509Certificate2(certificateByes);

我正在努力了解在 Azure Web 应用程序的上下文中这会如何突然发生变化。我们上次部署是在 11 月 20 日,昨天开始抛出。这个基本功能已经使用了几个月,没有出现任何问题。

我们之前确实在这方面遇到过麻烦,我们正在读取的字符串是从密钥库中检索的,但同样,这里没有任何改变。

我读过有关不同类型的错误的信息here and here但我们的错误消息是不同的,这几个月来一直运行良好。

这是否与应用程序运行的时间或填充某些临时存储位置的其他缓存问题有关?


经过数小时的研究/调试后,我了解到以下内容:

  • 我们在创建新的内容时遇到了逻辑错误X509Certificate2每次我们加载对象而不是缓存它时
  • 我们陷入了必须比我们需要的更频繁地创建这些证书的境地

一旦我们解决了这两个问题,并遵循了技巧#5here创建证书时,我们不再看到这些错误。作为参考,提示是不要从字节数组创建这些证书对象,因为临时文件是在幕后为您创建的,并且它们可能无法被清理。相反,我们正在做作者建议的事情:

var bytes = new byte[]{}; //byte array representing cert body
var file = Path.Combine(Path.GetTempPath(), "Cert" + Guid.NewGuid());
try
{
    File.WriteAllBytes(file, bytes);
    return new X509Certificate2(file, /* ...options... */);
}
finally
{
    File.Delete(file);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

X509Certificate2 构造函数抛出磁盘空间不足 的相关文章

随机推荐