我有一个ASP.NET应用程序,该应用程序访问证书存储中证书中的私钥.在Windows Server 2003上,我可以使用winhttpcertcfg.exe授予对网络服务帐户的私钥访问权限.如何授予访问IIS 7.5网站中Windows Server 2008 R2上证书存储(本地计算机\个人)中证书中私钥的权限?

我已try 使用证书MMC(Server 2008 R2)为"Everyone"、"IIS AppPool\DefaultAppPool"、"IIS_IUSRS"和我能找到的其他所有安全帐户授予完全信任访问权限.但是,下面的代码表明,该代码无权访问使用私钥导入的证书的私钥.每次访问私钥属性时,代码都会抛出并出错.

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "100">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="repeater1" runat="server">
            <HeaderTemplate>
                <table>
                    <tr>
                        <td>
                            Cert
                        </td>
                        <td>
                            Public Key
                        </td>
                        <td>
                            Private Key
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).GetNameInfo(X509NameType.SimpleName, false) %>
                    </td>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).HasPublicKeyAccess() %>
                    </td>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).HasPrivateKeyAccess() %>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table></FooterTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

Default.aspx.cs

推荐答案

  1. 创建/购买证书.确保它有私钥.
  2. 将证书导入"本地计算机"帐户.最好使用证书MMC.Make sure to check "Allow private key to be exported"
  3. 基于此,IIS 7.5应用程序池的标识使用以下选项之一.

    • IIS 7.5 Website is running under ApplicationPoolIdentity. Open MMC => Add Certificates (Local computer) snap-in => Certificates (Local Computer) => Personal => Certificates => Right click the certificate of interest => All tasks => Manage private key => Add IIS AppPool\AppPoolName and grant it Full control. Replace "AppPoolName" with the name of your application pool (sometimes IIS_IUSRS)
    • IIS 7.5网站正在网络服务下运行.使用证书MMC,将"网络服务"添加到"本地计算机\个人"中证书的完全信任.
    • IIS 7.5网站正在"MyIISUser"本地计算机用户帐户下运行.使用证书MMC,将"MyIISUser"(新的本地计算机用户帐户)添加到"Local Computer\Personal"中证书的完全信任.

更新基于@Phil Hale comments :

请注意,如果您在域中,您的域将在默认情况下在"发件人位置"框中被选中.确保将其更改为"本地计算机".将位置更改为"本地计算机"以查看应用池标识.

Asp.net相关问答推荐

IIS重写模块排除机器人但允许GoogleBot

ASP.NET控制器上的默认接受媒体类型

格式化 DataBinder.Eval 数据

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

登录成功后 User.Identity.IsAuthenticated 为 false

如何使用三个按钮是否和取消显示确认alert ,如 MS Word 中所示

如何在txt文件中保存异常?

使用 NancyFx 的好处?

ASP.NET 中的 <%# Bind("") %> 和 <%# Eval("") %> 有什么区别?

如何获取 ActionLink 的工具提示?

在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误

使用 LINQ 进行递归控制搜索

解析器错误:无法创建类型

在 ASP.NET 中实现 404 的最佳方法

如何在 asp net core api 中使用 Created(或 CreatedAtAction / CreatedAtRoute)

ASP.NET Core 中的 NuGet 包位置在哪里?

远程计算机无法连接到 Visual Studio Web 服务器

解耦 ASP.NET MVC 5 标识以允许实现分层应用程序

ModalPopupExtender OK 按钮单击事件未触发?

判断 IQueryable 结果集的最佳方法是什么?