我已经设法访问证书集合并通过指纹定位特定证书。我可以访问它的所有属性,并且它的“HasPrivateKey”设置为 true。
CspKeyContainerInfo 中的“可导出”标记为假。
当我执行 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....Certiificate2 对象以编程方式使用 toXmlString(true) 访问信息?
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);
}
干杯