如何解决C# X509Certificate2.PrivateKey 抛出异常“指定的提供程序类型无效”
我在 Windows Server 2019 上安装了受信任的 CA 颁发的 SSL 证书。当 ASP.NET MVC 控制器中的以下代码运行时,它确实检索了 X509Certificate2,其 HasProviateKey 属性为 true。但是当它的 PrivateKey 属性被访问时,它抛出了一个 CryptographicException: "invalid provider type specified."
X509Certificate2 certificate = null;
X509Store userCaStore = new X509Store(StoreName.My,StoreLocation.LocalMachine);
userCaStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificatesInStore = userCaStore.Certificates;
X509Certificate2Collection findResult = certificatesInStore.Find(X509FindType.FindByThumbprint,"xyz...",true);
if (findResult.Count != 1)
throw new Exception("Certificate not found.");
certificate = findResult[0];
userCaStore.Close();
之所以需要访问私钥,是因为服务器需要接受一些持久的 TCP 套接字连接,我打算使用 SSL 证书的公钥/私钥进行典型的握手:客户端生成一个随机 AES 密钥,并使用公钥加密此 AES 密钥并将其发送到服务器。这就是为什么我需要访问服务器端的私钥来解密AES密钥。
我该怎么做?
解决方法
我想通了,部分。它与 SSL 证书的加密类型有关。我尝试了相同的代码来检索另一个受信任的 CA 颁发的证书,并且 PrivateKey 属性确实将自身显示为 RsaCryptoServiceProvider。必须做的另一件事是右键单击证书存储 (mmc.exe) 中的证书并选择“所有任务 | 管理私钥”,并确保您的代码使用的身份在 ACL 中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。