【问题标题】:How to determine the CSP/KSP and key container of the private key when a certificate is loaded at run time?在运行时加载证书时,如何确定私钥的 CSP/KSP 和密钥容器?
【发布时间】:2021-11-08 00:57:34
【问题描述】:

在我们加载 X509Certificate2 时给出

var cert = new X509Certificate2(pfxFile,"somepassphrase");

除非指定了 X509KeyStorageFlags.EphemeralKeySet,否则私钥将被保留(我无法指定此选项,因为似乎存在错误 - 我在提交 https 发布请求时收到“安全包中没有可用的凭据” ),我需要确保在完成后将私钥从机器上移除。我正在使用此处提供的 c# 示例代码来删除密钥:https://www.pkisolutions.com/deleting-certificates-from-windows-certificate-store-programmatically-powershell-and-c/, 我要手动检查这实际上是删除?如何确定私钥所在位置的 CSP/KSP 和密钥容器或任何其他方法来验证它是否已删除?

【问题讨论】:

    标签: c# private-key x509certificate2


    【解决方案1】:

    当您使用私钥构造 X509Certificate2 对象并保留密钥时,会将密钥文件添加到文件系统上的密钥存储位置之一。确切的密钥位置由密钥提供者和上下文(当前用户或本地机器)确定。 Key Storage and Retrieval 文章中描述了查找路径。

    当您使用您引用的文章中的代码删除密钥时(实际上,我是您引用的文章的作者),该文件将从文件系统中删除。

    如果密钥存储在硬件设备上,例如智能卡、HSM、TPM,则需要使用设备供应商提供的 API 或工具来检查密钥是否真的被删除。

    【讨论】:

    • 由于我没有指定X509KeyStorageFlags,默认是UserKeySet,这意味着密钥存储在C:\Users\{username}\AppData\Roaming\Microsoft\Crypto\Keys...如何确定哪些密钥属于我的证书私钥?
    • certutil -user -store my "{certSerial}" 并找到 unique container name 字段。
    • 仅当证书导入到 Windows 证书存储区时才有效?我在这篇文章中包含的代码行是否真的将它导入到商店中??
    • 试过了,得到'找不到对象'
    • certutil 要求将证书安装在证书存储中。另一种选择(不需要深入研究代码)是按日期对文件夹中的项目进行排序。调用代码行,发现添加了新文件。然后调用API删除key,发现文件被删除了。
    猜你喜欢
    • 2017-08-10
    • 2017-11-25
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    相关资源
    最近更新 更多