首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查X509Certificate2是否可导出

如何检查X509Certificate2是否可导出
EN

Stack Overflow用户
提问于 2015-09-02 13:39:18
回答 3查看 3.4K关注 0票数 4
代码语言:javascript
复制
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);

var certificates = store.Certificates.Find(
    X509FindType.FindByThumbprint, thumbprint, false);

X509Certificate2 cert = certificates[0];

现在我们有了X509Certificate2实例。如何检查可出口私钥?(最好不要试图显式地导出)

EN

回答 3

Stack Overflow用户

发布于 2015-09-03 07:27:57

我在这里发现的另一种方法是:https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/a319b2c8-dcd6-4225-b0cb-a66c1910b79e/how-to-determine-whether-an-x509certificate2-is-exportable

private获取表示与证书关联的私钥的AsymmetricAlgorithm对象。 RSACryptoServiceProvider类是一个AsymmetricAlgorithm 然后获取RSACryptoServiceProvider.CspKeyContainerInfo,它是一个具有可导出属性的CspKeyContainerInfo对象,该属性:获取一个值,该值指示是否可以从密钥容器导出密钥。

更新:工作。因此,如果您使用RSA证书,这是可以接受的方法。

票数 2
EN

Stack Overflow用户

发布于 2015-09-02 14:32:05

查看参考源Export方法的实现进行以下检查:

  • X509ContentType参数为CertSerializedCertPfx
  • 当内容类型为Pfx时,它会对ExportOpen权限提出密钥容器权限请求。

除此之外,其他一切都是通过对CLR的内部调用来实现的,因此很难说出调用方的需求。我无法在源代码中观察到检查可导出标志的测试。

在这种情况下,我建议您尝试执行导出,并将任何异常作为反馈来处理;您不能合理地使用证书公开的信息来预测调用的结果。

票数 1
EN

Stack Overflow用户

发布于 2019-10-30 20:26:52

使用以下方法:

代码语言:javascript
复制
public static bool CheckCertificateIsExportable(X509Certificate2 certForCheck, X509ContentType certType)
    {
        try
        {
            certForCheck.Export(certType);
            return true;
        }
        catch
        {
            return false;
        }
    }

如何使用:

代码语言:javascript
复制
if (CheckCertificateIsExportable(certForCheck, X509ContentType.Pkcs12))
        {
            // Do...
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32354790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档