通过 CERTLM 导入设备证书/私钥时,GUI 似乎选择了一个已弃用的加密服务提供商 (CSP),称为“Microsoft Strong Cryptographic Provider”;我想知道是否有办法通过向导或组策略或(其他方式)将其更改为“Microsoft Software Key Storage Provider”。
更多详细信息:供应商要求我通过以下行命令语法将 PFX 导入 Windows 11 本地计算机证书存储:
certutil -csp "Microsoft Software Key Storage Provider" -importpfx MyPathToCertificate.pfx NoExport
这与他们的软件配合得很好,但是当我之前尝试导入相同的 PFX 时,我使用 CERTLM (GUI) 将证书导入到同一位置(本地计算机/个人存储)。这在当时似乎有效(证书出现在那里),但导致了解密错误,如供应商日志中所示。
以下是我通过 CERTLM 导入的方式:
- 我通过 UAC / 选择证书启动命令提示符(本地计算机)
- 我使用默认选项将 PFX 导入到个人商店
运行以下命令后:
Certutil -store My
我注意到证书有以下行:
Provider = Microsoft Strong Cryptographic Provider
而 certutil 命令明确选择“Microsoft Software Key Storage Provider”
根据https://www.pkisolutions.com/understanding-microsoft-crypto-providers/,“Microsoft Strong Cryptographic Provider”是一个已弃用的旧提供程序,而“Microsoft Software Key Storage Provider”是使用新密钥的现代首选。
不同的 CSP 解释了为什么供应商的应用程序在原始导入后无法工作,我理解为什么 MS 会选择“旧”提供程序作为向后兼容性的默认提供程序,但我很好奇是否有方法在执行时指定 CSP今后将通过 CERTLM 进行导入。
对您问题的简短回答:不,您无法在 MMC GUI 中导入期间指定提供程序,您必须使用 certutil。
证书 MMC(
certmgr.msc
和certlm.msc
)尝试将密钥导入到 PKCS#12 文件中指定的同一提供程序作为属性(Windows 计算机在证书导出到 PFX 期间设置此属性,并且导入逻辑遵循此属性)。如果提供商未指定或不可用,密钥将导入到旧版 CSP 中。原因是,2023 年有许多应用程序不支持 CNG 提供商,而 CERTLM 使用最兼容的提供商。如果你想使用不同的提供者,你必须使用
certutil -importPFX
with-csp
参数。Crypt32 有最好的简短答案,但我会尝试用一些额外的陷阱来修饰:
回答:您不需要选择原始
"Microsoft Software Key Storage Provider"
证书是否是使用同一提供商创建的并通过 CERTLM 作为 pfx 导出。如果您确实需要指定您的提供者,您可以覆盖它(例如使用 withcertutil -importPFX
参数-csp
)。更多详细信息:如果您像我一样刚刚开始,您可能已经阅读了 Microsoft 的文档,其中提供了一种通过 PowerShell 和命令创建自签名证书的方法
New-SelfSignedCertificate
。我在网上读到的所有内容都表明该命令默认
New-SelfSignedCertificate
创建作为提供者的证书。"Microsoft Software Key Storage Provider"
但是,当您按照 Microsoft 文档中的步骤操作时,您最终将成为Microsoft Strong Cryptographic Provider
您的提供商。为什么?问题是下面一行:
KeySpec = 'Signature'
根据Microsoft 关于 PS 命令本身的文档,KeySpec 本质上是一个遗留属性:
通过包含 KeySpec 的值,我们最终创建了一个使用默认旧提供程序 (
Microsoft Strong Cryptographic Provider
) 的证书。我们该如何解决这个问题?只需将该属性替换为以下两个即可:
最后的例子看起来像这样:
如果您在此之后运行此命令:
certutil -user -store My
您应该在该证书后面看到一行Provider = Microsoft Software Key Storage Provider
。