我可以在不使用证书存储的情况下在ASP.NET中使用X509Certificate2吗?

问题描述:

我正尝试在Rackspace Cloud内的ASP.NET Web服务中使用X509Certificate。我有一种感觉,云节点上存储的证书可能会导致问题。我也有与此相关的与异常的问题,我在SslStream.AuthenticateAsClient Exception when using iPhone Apple Push Notification Provider (apns-sharp) C#我可以在不使用证书存储的情况下在ASP.NET中使用X509Certificate2吗?

接收内APNS锋利的项目,我用的是下面的代码:

certificate = new X509Certificate2(p12File) 

但是我收到一个异常,更改代码以下解决了X509Certificate2异常。新代码如下:

certificate = new X509Certificate2(p12File, String.Empty, X509KeyStorageFlags.MachineKeySet); 

我想知道我是否可以使用在ASP.NET中的X509Certificate2不使用证书存储?存储证书会导致Rackspace Cloud节点出现问题吗?

更新#1 Rackspace告诉我,不允许访问本地计算机证书存储区。有没有其他方法可以绕过使用证书存储?也许使用第三方库?

第一个构造函数不起作用的原因是ASP.NET不加载用户配置文件存储区,如果您未使用X509KeyStorageFlags指定存储位置,则该用户配置文件存储区是默认存储区。但是,机器存储始终由ASP.NET加载,这就是第二个构造函数工作的原因。

我假设你打算使用证书上的私钥加密或创建数字签名(哈希),在这种情况下,您无法避免使用证书存储,因为私钥只能以编程方式从私钥访问导入的证书,而不是直接来自斑点或文件。

如果证书数据只包含公钥,我不认为使用证书存储(因为没有敏感数据可以保护) - 我注意到,我只需要指定机器商店,当我打算处理包含私钥的证书。

虽然我不能评论Rackspace的情况,但在部分信任环境中运行的代码中导入证书可能存在问题,因为加载私钥容器需要特定的权限,而这些权限可能不会授予您的程序集。

+0

好的,谢谢。我假设该证书包含私钥,因为这用于Apple iPhone推送通知服务。您能否提供更多详细信息:“在部分信任环境中运行的代码中导入证书可能存在问题,因为加载私钥容器需要特定的权限,而这些权限可能不会授予您的程序集。”? – Luke 2010-01-20 06:17:17

+1

另外,我在我的开发人员服务器上运行代码,使用Rackspace在http://cloudsites.rackspacecloud.com/index.php/Overview_of_modified_Medium_Trust底部使用的相同的修改后的介质信任文件,我没有收到任何例外情况开发。服务器。 – Luke 2010-01-20 06:18:18

我已经从文件导入的X509Certificate2并同时具有使用此代码私人提供和公钥:

  X509Certificate2 cert = new X509Certificate2(); 
      // Key Location: the physical file location (C:\cert.pfx) 
      // Key Password: the password for the certificate 
      cert.Import(keyLocation, keyPassword, X509KeyStorageFlags.Exportable); 

我的经验是,关键有它的工作是X509KeyStorageFlags.Exportable。没有这个,我无法访问私钥。