7

我正在尝试在 Rackspace 云中的 ASP.NET Web 服务中使用 X509Certificate。我感觉云节点上的证书存储可能会导致问题。我也有一个与此相关的问题,除了我在使用 iPhone Apple 推送通知提供程序(apns-sharp)C# 时在 SslStream.AuthenticateAsClient Exception处收到的异常

在 apns-sharp 项目中,我使用了以下代码:

certificate = new X509Certificate2(p12File)

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

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

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

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

4

2 回答 2

4

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

我假设您打算使用证书上的私钥进行加密或创建数字签名(散列),在这种情况下,您无法避免使用证书存储,因为私钥只能通过导入的证书以编程方式访问,并且不是直接来自 blob 或文件。

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

不过,我无法评论 Rackspace 的情况 - 在部分受信任的环境中运行的代码中导入证书可能会出现问题,因为加载私钥容器需要可能不会授予您的程序集的特定权限。

于 2010-01-20T06:05:29.897 回答
1

我已经从一个文件中导入了一个 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。没有它,我无法访问私钥。

于 2010-02-23T16:09:14.960 回答