在Windows证书存储区中的x509证书中访问PrivateKey标记为不可导出

时间:2015-03-19 07:16:07

标签: c# private-key x509certificate2 certificate-store

我已设法访问证书集合并通过指纹定位特定证书。我可以访问它的所有属性,并将其“HasPrivateKey”设置为true。

CspKeyContainerInfo中的“Exportable”标记为false。

当我做一个PrivateKey.ToXmlString(false)意味着我没有得到关键参数,只是模数和指数它的罚款:

<RSAKeyValue>
    <Modulus>4hjg1ibWXHIlH...ssmlBfMAListzrgk=</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

但如果我将它设置为toXmlString(true)以获取它失败的所有值:

<RSAKeyValue>
    <Modulus>4hjg1ibWXHIlH...ssmlBfMAListzrgk=</Modulus>
    <Exponent>AQAB</Exponent>
    <P>8QZCtrmJcr9uW7VRex+diH...jLHV5StmuBs1+vZZAQ==</P>
    <Q>8CUvJTv...yeDszMWNCQ==</Q>
    <DP>elh2Nv...cygE3657AQ==</DP>
    <DQ>MBUh5XC...+PfiMfX0EQ==</DQ>
    <InverseQ>oxvsj4WCbQ....LyjggXg==</InverseQ>
    <D>KrhmqzAVasx...uxQ5VGZmZ6yOAE=</D>
</RSAKeyValue>

但是,如果我重新导入证书并将其标记为“可导出”,那么上面的内容使我可以访问我需要继续的所有KeyInformation。

是否有办法保持密钥不可导出,并仍使用x509以编程方式访问toXmlString(true)信息.... Certiificate2对象?

   X509Certificate2Collection xcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByThumbprint, "4678237245FEDC8059D113675955DFB870D36BF4", false);

        foreach (X509Certificate2 x509 in xcollection)
        {
            var y = x509.PrivateKey.ToXmlString(false);
            var f = x509.PrivateKey.ToXmlString(true);
        }

干杯

0 个答案:

没有答案