在远程计算机上的 .net 核心中加载私钥时出错



我有一个.net核心Web API项目来处理JWT令牌,该项目使用Eliptic Curve ES256(secp256r1(证书。

证书以密码加密方式加密到数据库中。

我可以检索和验证传入的令牌,但是在尝试检索用于签署新令牌的私钥时遇到问题。

我正在使用的功能是:

private static ECDsa LoadPrivateKey(string privateKey)
{
var ecDsaCng = new ECDsaCng(CngKey.Import(Convert.FromBase64String(privateKey), CngKeyBlobFormat.Pkcs8PrivateBlob));
ecDsaCng.HashAlgorithm = CngAlgorithm.ECDsaP256;
return ecDsaCng;
}

我面临的问题是,虽然这在我的本地开发计算机上工作正常,但当我将其部署到测试服务器时,它会失败并显示消息

发生内部错误

我启用日志记录,并且可以确认检索到的值在远程服务器和开发计算机中都是相同的。

如何解决这个问题?

所以我终于设法理解了这里的问题所在。 当我将其部署到在 IIS 下运行的测试服务器时,似乎运行 APP 池的用户不是测试盒上的本地管理员。

似乎要在机器上创建私钥,我们需要用户(在本例中为 APP 池(是本地管理员

我在尝试调试时引用了此 URL,它确实为我指明了正确的方向: https://blogs.msdn.microsoft.com/dsnotes/2012/08/17/cngkey-import-throws-an-exception-saying-an-internal-error-occurred-when-importing-a-key-blob-under-a-non-admin-user-from-a-wcf-web-service/

最新更新