X509Certificate.LoadStoreFromFile():必须信任计算机以进行委派,并且必须将当前用户帐户配置为允许委派

时间:2017-09-05 05:41:11

标签: c# asp.net-mvc active-directory cryptography

在通过AD帐户登录时尝试在C#MVC Web应用程序中加载p12证书文件时遇到问题。

加载证书时出现的错误是:必须信任计算机以进行委派,并且必须将当前用户帐户配置为允许委派。

加载证书的代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

var handler = new WebRequestHandler();

var certificate = new X509Certificate2Collection();
certificate.Import(@"D:\certificate.p12", "password", X509KeyStorageFlags.DefaultKeySet);
handler.ClientCertificates.AddRange(certificate);
handler.ServerCertificateValidationCallback = ValidateServerCertificate;

var client = new HttpClient(handler)
{
    BaseAddress = new Uri(chargeCodeServer)
};

我们在以下行获得例外:

certificate.Import(@"D:\certificate.p12", "password", X509KeyStorageFlags.DefaultKeySet);

堆栈跟踪:

The requested operation cannot be completed. The computer must be trusted for delegation and the current user account must be configured to allow delegation.
at System.Security.Cryptography.X509Certificates.X509Certificate2Collection.LoadStoreFromFile(String fileName, String password, UInt32 dwFlags, Boolean persistKeyContainers)
at System.Security.Cryptography.X509Certificates.X509Certificate2Collection.Import(String fileName, String password, X509KeyStorageFlags keyStorageFlags)

相同的代码在控制台应用程序中运行良好。

正在加载证书以通过https调用Web API。

如果需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:2)

我有同样的错误,对我来说是这样的:

certificate = new X509Certificate2(keyCertificateFilePath, keyCertificatePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

答案 1 :(得分:0)

如果其他人仍然面临此问题,则允许访问运行该Web应用程序的帐户的证书。

与控制台应用程序不同,要使ASP.NET Web应用程序能够使用客户端证书,必须在本地计算机存储中安装客户端证书。在本地计算机存储中安装客户端证书时,客户端证书仅适用于Administrators组中的用户帐户以及安装客户端证书的用户。因此,您必须为用于运行ASP.NET Web应用程序的用户帐户授予对客户端证书的访问权限。