1

从 Web 应用程序运行此代码时,我看不到任何 X509 证书:

var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);

            string thumbprint = WebConfigurationManager.AppSettings["CertificateThumbprint"];

            if (string.IsNullOrWhiteSpace(thumbprint))
            {
                throw new ArgumentException("Please specify the X509 certificate thumbprint in the web configuration file.");
            }

            Certificate = store.Certificates
                .Find(X509FindType.FindByThumbprint, thumbprint, true)
                .OfType<X509Certificate2>()
                .FirstOrDefault();

            store.Close();

            if (Certificate == null)
            {
                throw new ArgumentException("The specified X509 certificate has not been installed on this server.");
            }

调试时,我可以看到它store.Certificates是空的。但是,它在控制台应用程序中运行得非常好。这很奇怪,因为我在网上看到了在 Web 应用程序中使用上述代码的示例。

如果代码会从网络应用程序中抛出某种权限异常或某些东西来告诉我为什么我无法阅读它们,那将会很有帮助,但事实并非如此。那么,我需要在某处设置一些权限还是什么?

4

2 回答 2

1

我将证书放在 TrustedPeople 存储中,它工作正常:

var store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);

于 2013-02-25T10:06:15.930 回答
0

要解决权限问题,请将证书导出到 .pfx 文件(受密码保护)。要使用 mmc 导出:添加管理单元 -> 证书,然后将证书导出(并设置密码)到方便的位置。然后

var certF = new X509Certificate2(
                    @"D:\somedir\withaccess\exported.pfx", "password!");

为什么要从StoreName.Root受信任的根证书颁发机构移动证书?

StoreName enums如果权限允许,可以按名称访问不在 中的存储,例如“WebHosting”:

var store = new X509Store( "WebHosting", StoreLocation.LocalMachine);
于 2015-02-03T10:10:09.897 回答