访问X509Certificate2关键数据时生产应用程序崩溃



真的希望你能在以下方面帮助我。

我创建了一个.Net核心应用程序,它作为windows服务运行。我正在尝试打开证书以解密应用程序设置。

我在本地计算机和测试服务器上使用的证书是相同的证书。有问题的证书的公钥是X5092。

我有以下代码从存储中读取证书以获取值。

public void Start()
{
using (var store = new X509Store(Location))
{
store.Open(OpenFlags.ReadOnly);
var signingCert = store.Certificates.Find(CriteriaType, _thumb, false);
_logger.Warning($"Number of certs found {signingCert.Count}");
var firstCert = signingCert[0];
_logger.Warning($"Subject - {firstCert.Subject}");
Thread.Sleep(1000);
try
{
_logger.Warning($"Private Key - {firstCert.PrivateKey}");
_logger.Warning($"Get RSA Private Key Method {firstCert.GetRSAPrivateKey()}");
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
}
}

应用程序使用指纹ThumbPrint枚举查找证书,并且不关心证书是否有效。firstCert的值就是我所追求的证书。";主题";正确打印到日志文件以及除公钥和私钥道具之外的任何其他道具。

我的应用程序在调用以下时立即崩溃

firstCert.PrivateKey
firstCert.GetRSAPrivateKey()
firstCert.PublicKey.{anotherProp}

碰撞发生在以下情况下。

  1. 服务器正在重新启动
  2. 应用程序设置为自动启动
  3. 应用程序作为服务运行
  4. 登录为本地系统帐户。当应用程序崩溃时,在我尝试访问证书的密钥数据后,就没有日志了。没有发现异常,应用程序无法启动,我只是通过查看被告知已停止的服务来发现这一点

应用程序在以下条件下正常工作

  1. 在本地计算机上调试时
  2. 作为服务运行,在自动启动时,作为本地计算机上的本地系统帐户
  3. 如上所述,但从服务功能开始
  4. 在测试服务器上,但启动延迟
  5. 在测试服务器上,但从服务功能启动

编写的应用程序是.Net5我的本地机器是windows10企业版。服务器为2012 R2。

因此,我们最近遇到了这个问题,每次重新启动机器时,服务(设置为自动启动(都会无法启动,没有异常或错误(只是事件查看器中的服务控制管理器发出了一个错误,指出超时30000毫秒(。经过大量调试,我们发现在尝试从证书访问私钥后,它挂起了(这让我们看到了这篇文章(。

经过进一步调查,我们发现有一个依赖服务没有及时启动,这就是CNG密钥隔离服务(KeyIso是服务名称(。我们更新了要创建的服务,并对其进行了依赖,现在它每次都能正确启动。

对于powershell,这是一个将-DependsOn "KeyIso"添加到New-Service命令中的情况。也可以通过sc命令进行添加。

相关内容

  • 没有找到相关文章

最新更新