X509Store Certificates.Find()间歇性地找不到证书

时间:2017-04-25 08:23:34

标签: c# asp.net-mvc x509 client-certificates certificate-store

我的MVC网络应用程序出现问题,该应用程序使用私人证书调用其他服务。

证书位于我的个人密钥库中,针对当前计算机 - 我使用winhttpcertcfg将证书的权限授予我的Web应用程序的应用程序池标识。密钥按以下方法加载;

internal bool SetCertificateFromCertStore(string subjectName)
{
    X509Store store = null;
    try
    {
        store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly);
        X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, subjectName, true);
        if (certs.Count != 1)
        {
            store.Close();
            store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            certs = store.Certificates.Find(X509FindType.FindBySubjectName, subjectName, true);
            if (certs.Count != 1)
            {
                throw new Exception("Unable to find Certificate");
            }
        }
        _certificate = certs[0];
        return true;
    }
    finally
    {
        if (store != null)
        {
            store.Close();
        }
    }
}

此代码每次都工作到几周前(4月12日),当时我在17:05注意到ELMAH中第一个出现“无法找到证书”异常的例子。检查应用程序日志,系统仍在处理几乎所有请求,此错误在某些请求上每小时只会出现几次。

我已经阅读了类似的问题,建议实现类似于我已经使用的代码(查询多个商店)。 Windows证书存储是否存在某种已知问题?也许一个锁定问题?是否还有另一种方法可以解决这个或明显的问题,我在这里做错了?

您可以提供的任何帮助都会受到赞赏,因为我已经用尽了一些东西!

0 个答案:

没有答案