gpt4 book ai didi

c# - IIS Web Server下证书私钥抛出CryptographicException

转载 作者:行者123 更新时间:2023-11-30 14:27:23 25 4
gpt4 key购买 nike

在我的 ASP.NET 应用程序中,我正在从证书存储区加载证书:

var myCert = CertificateUtils.GetCertificate("thumbprint");

此证书包含一个 key 对,用于解密加密的应用程序设置。

证书安装在 本地计算机 下的个人 证书存储中。当应用程序在 IIS Express 下运行时,它运行良好。但是,如果我在完整 IIS Web 服务器 下执行它,myCert 实例缺少私钥

myCert对象的PrivateKey字段出现异常:

'myCert.PrivateKey' threw an exception of type 'System.Security.Cryptography.CryptographicException'

我检查过 myCert 对象的其他字段是否包含相同的值(例如,证书序列号、指纹或过期时间),所以看起来它在两个 下都获得了相同的证书IISIIS Express。在完整的 IIS 情况下,只有私钥丢失。

我唯一更改的是项目属性中的本地开发服务器(“使用 IIE Express”/“使用 IIS Web 服务器”)。在这两种情况下,它都在 Azure Emulator Express 中运行。

有没有人知道为什么会这样?

最佳答案

在 IIS Express 上运行,该程序使用您的凭据来访问证书,而在 IIS 上使用池标识的凭据。您可以轻松检查证书 ACL 以查看允许或不允许的用户。

请按照以下步骤操作:

  1. 检查您的网站使用的应用程序池

    打开Internet 信息服务管理器,在左侧的连接 树中选择站点。在中间面板中选择您的网站,然后点击右侧面板上操作下的基本设置

  2. 检查应用程序池使用的身份

    在左侧的Connections 树中选择Application Pools,然后在中间面板中找到标识。它可能是“网络服务”。

  3. 将应用程序池使用的身份的读取权限添加到您的证书

    打开 Microsoft 管理控制台 (mmc),为本地计算机帐户添加证书 管理单元,然后在下找到您的证书>个人证书。打开其上下文菜单、所有任务管理私钥...。单击添加..,输入标识(“网络服务”)并单击检查名称确定。在 的权限下,仅允许读取 权限。

    您可以在这个问题中阅读详细信息:How to give ASP.NET access to a private key in a certificate in the certificate store?

关于c# - IIS Web Server下证书私钥抛出CryptographicException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com