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实例。如何检查可出口私钥?(最好不要试图显式地导出)
发布于 2015-09-03 07:27:57
private获取表示与证书关联的私钥的AsymmetricAlgorithm对象。 RSACryptoServiceProvider类是一个AsymmetricAlgorithm 然后获取RSACryptoServiceProvider.CspKeyContainerInfo,它是一个具有可导出属性的CspKeyContainerInfo对象,该属性:获取一个值,该值指示是否可以从密钥容器导出密钥。
更新:工作。因此,如果您使用RSA证书,这是可以接受的方法。
发布于 2015-09-02 14:32:05
查看参考源,Export方法的实现进行以下检查:
X509ContentType参数为Cert、SerializedCert或Pfx。Pfx时,它会对Export和Open权限提出密钥容器权限请求。除此之外,其他一切都是通过对CLR的内部调用来实现的,因此很难说出调用方的需求。我无法在源代码中观察到检查可导出标志的测试。
在这种情况下,我建议您尝试执行导出,并将任何异常作为反馈来处理;您不能合理地使用证书公开的信息来预测调用的结果。
发布于 2019-10-30 20:26:52
使用以下方法:
public static bool CheckCertificateIsExportable(X509Certificate2 certForCheck, X509ContentType certType)
{
try
{
certForCheck.Export(certType);
return true;
}
catch
{
return false;
}
}如何使用:
if (CheckCertificateIsExportable(certForCheck, X509ContentType.Pkcs12))
{
// Do...
}https://stackoverflow.com/questions/32354790
复制相似问题