我有一个 ASP.NET 应用程序,它可以访问证书存储中证书中的私钥。在 Windows Server 2003上,我能够使用 winhttpcertcfg.exe 为 NETWORK SERVICE 帐户提供私钥访问。如何授权访问 Iis7.5网站 Windows Server 2008 R2的证书存储区(本地计算机个人)中的证书的私钥?
我已经尝试过使用证书 MMC (Server 2008 R2)为“每个人”、“ IIS AppPool DefaultAppPool”、“ IIS _ IUSRS”和所有其他安全帐户提供 Full Trust 访问权限。但是,下面的代码说明该代码不能访问用私钥导入的证书的私钥。相反,每次访问私钥属性时,代码都会抛出和出错。
Default.aspx
<%@Page Language = “ C #”AutoEventWireup = “ true”CodeFile = “ Default.aspx.cs”Heritage its = “ _ Default”% > <%@Page Language = “ C #”AutoEventWireup = “ true”CodeFile = “ Default.aspx.cs”Heritage its = “ _ Default”% >
<%@Import Namespace = “ System. Security. Cryptography.X509证书”% >
< DOCTYPE html PUBLIC”-//W3C//DTD XHTML 1.0过渡期//EN”“ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
< html xmlns =”http://www.w3.org/1999/xhtml"> ;
<head runat="server">
< 标题 >
< 身体 >
< form id = “ form1”runat = “ server”>
< div >
< asp: 转发器 ID = “ repater1”runat = “ server”>
<HeaderTemplate>
< 表 >
< tr >
< td >
证书
< td >
Public Key
</td>
< td >
私人钥匙
</HeaderTemplate>
< 项目模板 >
<tr>
< td >
<% # ((X509Cericate2) Container. Dataltem) . GetNameInfo (X509NameType. SimpleName,false)% >
< td >
<% # ((X509Cericate2) Container. Dataltem) . HasPublicKeyAccess ()% >
<td>
<%#((X509Certificate2)Container.DataItem).HasPrivateKeyAccess() %>
</td>
</tr>
</ItemTemplate>
< FooterTemplate >
Default.aspx.cs
使用系统;
使用系统。保安。密码学;
using System.Security.Cryptography.X509Certificates;
使用 System.Web.UI;
Public 部分 class _ Default: Page
{
公开的 X509证书2收集证书;
Protected void Page _ Load (对象发送器,EventArgs e)
{
// Local Computer\Personal
Var store = new X509Store (StoreLocation. LocalMachine) ;
// create and open store for read-only access
开放(OpenFlags.ReadOnly) ;
证书 = 存储。证书;
DataSource = 证书;
Repater1.DataBind () ;
}
}
公共静态类扩展
{
Public 静态字符串 HasPublicKeyAccess (此 X509Cericate2证书)
{
试试看
{
非对称算法 = cert
}
catch (Exception ex)
{
填报「不」 ;
}
填报「是」 ;
}
Public 静态字符串 HasPrivateKeyAccess (此 X509Cericate2证书)
{
试试看
{
字符串算法 = cert
}
Catch (例外)
{
填报「不」 ;
}
填报「是」 ;
}
}