【问题标题】:Can I use an X509Certificate2 within ASP.NET without using a certificate store?我可以在不使用证书存储的情况下在 ASP.NET 中使用 X509Certificate2 吗?
【发布时间】:2011-01-07 03:18:48
【问题描述】:

我正在尝试在 Rackspace 云中的 ASP.NET Web 服务中使用 X509Certificate。我感觉云节点上的证书存储可能会导致问题。我也有一个与此相关的问题,除了我在SslStream.AuthenticateAsClient Exception when using iPhone Apple Push Notification Provider (apns-sharp) C# 收到的例外情况@

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

certificate = new X509Certificate2(p12File)

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

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

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

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

【问题讨论】:

    标签: c# asp.net x509certificate2 apns-sharp


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,谢谢。我假设证书包含私钥,因为它用于 Apple iPhone 推送通知服务。您能否提供有关“在部分受信任的环境中运行的代码中导入证书可能存在问题,因为加载私钥容器需要可能未授予您的程序集的特定权限”的更多详细信息?
    • 另外,我正在我的开发人员服务器上运行代码,使用与 Rackspace 在cloudsites.rackspacecloud.com/index.php/… 底部使用的相同修改过的介质信任文件我在我的开发人员中没有收到任何异常。服务器。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2012-05-25
      相关资源
      最近更新 更多