最近,我将我的应用程序从ASP.Net重写为ASP.Net Core,从那以后,读取证书的私钥对我来说是失败的。
这是执行此操作的代码:
public static byte[] DecryptWithCert([NotNull] X509Certificate2 cert, byte[] payload)
{
using (var rsaPrivateKey = cert.GetRSAPrivateKey())
{
return rsaPrivateKey.Decrypt(payload, RSAEncryptionPadding.OaepSHA256);
}
}
证书肯定具有私钥,因为cert对象也表明了这一点。然而,事实证明,抛出此异常:
cert.PrivateKey' threw an exception of type 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException
异常消息说:
Keyset couldn't be found
这里可能是什么问题?
编辑:
问题似乎可能是由于ASP.Net Core无法通过IIS运行,并且可能缺少现在访问该证书私钥的权限。
我刚刚用一个小型控制台应用程序对其进行了测试,该应用程序可以获取PK,因此证书不会被破坏。
但是,我真的不知道我必须添加什么用户才能使我的Kestrel托管应用读取该证书密钥。
答案 0 :(得分:0)
好的,我发现了问题:
我刚刚在certmgr->所有任务->管理私钥的用户列表中添加了“网络服务”。
我的问题特别是,在我撰写本文之前的最初方法中,我也尝试过此操作,但是考虑到我最近从德语切换为英语,Windows仍然希望我用德语键入该User。因此,在这里正确命名显然只是一个问题。