ASP.NET是否可以在没有文件系统权限的情况下从证书存储中获取X509证书?

ASP.NET是否可以在没有文件系统权限的情况下从证书存储中获取X509证书?,asp.net,saml-2.0,x509certificate2,Asp.net,Saml 2.0,X509certificate2,应将出现在certmgr.msc中的可信根证书颁发机构节点中的证书保存在何处,以便IIS web应用程序可以获取该证书并与其签署SAML断言?是否有一种方法可以直接从证书“配置单元”提取证书,而不需要文件系统权限?或者是否需要将证书导出到IIS7内置用户具有访问权限的文件夹中 X509Certificate2.Import()方法的第一个参数是fileName 如果我导出证书并将文件放入Visual Studio 2012项目文件夹层次结构中,并为Import()方法提供完全限定路径,则证书导入

应将出现在certmgr.msc中的
可信根证书颁发机构
节点中的证书保存在何处,以便IIS web应用程序可以获取该证书并与其签署SAML断言?是否有一种方法可以直接从证书“配置单元”提取证书,而不需要文件系统权限?或者是否需要将证书导出到IIS7内置用户具有访问权限的文件夹中

X509Certificate2.Import()
方法的第一个参数是
fileName

如果我导出证书并将文件放入Visual Studio 2012项目文件夹层次结构中,并为Import()方法提供完全限定路径,则证书导入将成功,但仅当应用程序在Visual Studio的内置服务器中运行时,而不是在本地IIS Web服务器中运行时,证书导入才会成功

我尝试将友好名称
x509keystrageflags.MachineKeySet一起使用,但没有成功

编辑:在Windows 7中使用内置Visual Studio服务器但不使用本地IIS7服务器时,此选项有效:

            certStore = New X509Store(StoreLocation.CurrentUser)
            certStore.Open(OpenFlags.ReadOnly)
            Dim thumbprint As String
            thumbprint = ConfigurationManager.AppSettings("thumb").ToString
            certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, False)
            certStore.Close()
            cert = certCollection(0)
因此,我需要了解如何在Windows 7中为默认应用程序池授予对此证书的访问权限。

您不需要“导入”,只需创建一个实例即可。形式上,您打开一个密钥存储并循环通过证书。是的,您不需要任何文件系统权限,但是,要访问私钥,您的应用程序池标识必须具有对密钥的权限,您可以在mmc控制台的证书管理单元中设置权限

编辑:访问证书的代码如下:

var store = new X509Store( name, location );
store.Open( OpenFlags.ReadOnly );

foreach ( var cert in store.Certificates )
   ... loop and match, by thumbprint, friendly name or whatever else

谢谢你,Wiktor,但我认为没有办法将应用程序池标识权限授予mmc控制台证书管理单元中的密钥,至少在我运行Windows 7的开发计算机上是这样。我将尝试找到如何执行此操作。哪个对象具有创建方法?右键单击证书并选择“管理私钥”选项(如果该选项的名称稍有不同,则表示抱歉,但我使用的是本地化的Windows 7)。对于第二个问题,我指的是构造函数,但是首先你必须打开存储,然后找到证书或枚举证书并匹配你搜索的证书。我认为问题在于Windows 7和Windows Server 2008可能以不同的方式执行此操作。只有在使用内置Visual Studio服务器时,我才能成功地使用X509Store.Find方法(请参见对我上面问题的编辑)。MMC的Windows 7证书管理单元似乎没有右键单击证书显示“管理私钥”选项的上下文菜单。