证书私钥在ASP.Net Core上引发WindowsCryptographicException

时间:2019-03-30 22:22:05

标签: c#

最近,我将我的应用程序从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托管应用读取该证书密钥。

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题:

我刚刚在certmgr->所有任务->管理私钥的用户列表中添加了“网络服务”。

我的问题特别是,在我撰写本文之前的最初方法中,我也尝试过此操作,但是考虑到我最近从德语切换为英语,Windows仍然希望我用德语键入该User。因此,在这里正确命名显然只是一个问题。