在通过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。
如果需要更多信息,请与我们联系。
答案 0 :(得分:2)
我有同样的错误,对我来说是这样的:
certificate = new X509Certificate2(keyCertificateFilePath, keyCertificatePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
答案 1 :(得分:0)
如果其他人仍然面临此问题,则允许访问运行该Web应用程序的帐户的证书。
与控制台应用程序不同,要使ASP.NET Web应用程序能够使用客户端证书,必须在本地计算机存储中安装客户端证书。在本地计算机存储中安装客户端证书时,客户端证书仅适用于Administrators组中的用户帐户以及安装客户端证书的用户。因此,您必须为用于运行ASP.NET Web应用程序的用户帐户授予对客户端证书的访问权限。