Daw*_*žan 3 c# asp.net iis iis-express
在我的ASP.NET应用程序中,我正在从证书存储区加载证书:
var myCert = CertificateUtils.GetCertificate("thumbprint");
Run Code Online (Sandbox Code Playgroud)
此证书包含一个密钥对,用于解密加密的应用程序设置.
证书安装在本地计算机下的个人证书存储中.当应用程序在IIS Express下运行时,它运行良好.但是如果我在完整的IIS Web服务器下执行它,则该实例缺少私钥. myCert
该PrivateKey领域myCert对象包含了异常:
'myCert.PrivateKey' threw an exception of type 'System.Security.Cryptography.CryptographicException'
Run Code Online (Sandbox Code Playgroud)
我已检查过myCert对象的其他字段是否包含相同的值(例如,证书序列号,指纹或过期),因此它似乎在IIS和IIS Express下获得相同的证书.在完整IIS的情况下,仅缺少私钥.
我唯一改变的是项目属性中的本地开发服务器("使用IIE Express"/"使用IIS Web服务器").它在两种情况下都在Azure Emulator Express中运行.
有没有人有想法,为什么会这样?
在IIS Express上运行,程序使用您的凭据访问证书,而在IIS上使用池身份的凭据.您可以轻松检查证书ACL以查看是否允许.
跟着这些步骤:
检查您的网站使用的应用程序池
打开Internet信息服务管理器,在左侧的" 连接"树中选择" 站点 ".在中间面板中选择您的站点,然后单击右侧面板上" 操作 " 下的" 基本设置 " .
检查应用程序池使用的标识
在左侧的Connections树中选择Application Pools,然后在中间面板中找到标识.它可能是"网络服务".
将应用程序池使用的标识的读取权限添加到证书中
打开Microsoft管理控制台(mmc),为本地计算机帐户添加" 证书"管理单元,并在" 个人证书" 下找到您的证书.打开它的上下文菜单,所有任务和管理私钥....单击添加..,输入标识("网络服务"),然后单击检查名称和确定.在权限下,仅允许读取权限.
您可以在此问题中阅读详细信息:如何让ASP.NET访问证书库中证书中的私钥?
| 归档时间: |
|
| 查看次数: |
5671 次 |
| 最近记录: |