AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1148606
Accepted
tb1
tb1
Asked: 2023-11-27 01:26:53 +0800 CST2023-11-27 01:26:53 +0800 CST 2023-11-27 01:26:53 +0800 CST

本地计算机证书 (certlm.msc) - 在导入时选择“Microsoft Software Key Storage Provider”

  • 772
这个问题是从信息安全堆栈交换迁移来的,因为它可以在服务器故障上得到回答。 昨天迁移了 。

通过 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 导入的方式:

  1. 我通过 UAC / 选择证书启动命令提示符(本地计算机)
  2. 我使用默认选项将 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 进行导入。

certificate
  • 2 2 个回答
  • 46 Views

2 个回答

  • Voted
  1. Best Answer
    Crypt32
    2023-11-27T16:48:01+08:002023-11-27T16:48:01+08:00

    对您问题的简短回答:不,您无法在 MMC GUI 中导入期间指定提供程序,您必须使用 certutil。

    证书 MMC(certmgr.msc和certlm.msc)尝试将密钥导入到 PKCS#12 文件中指定的同一提供程序作为属性(Windows 计算机在证书导出到 PFX 期间设置此属性,并且导入逻辑遵循此属性)。如果提供商未指定或不可用,密钥将导入到旧版 CSP 中。原因是,2023 年有许多应用程序不支持 CNG 提供商,而 CERTLM 使用最兼容的提供商。

    如果你想使用不同的提供者,你必须使用certutil -importPFXwith-csp参数。

    • 4
  2. tb1
    2023-11-28T06:58:37+08:002023-11-28T06:58:37+08:00

    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 本质上是一个遗留属性:

    “如果私钥由旧版 CSP 管理,则值为 KeyExchange 或 Signature。如果密钥由下一代加密 (CNG) KSP 管理,则值为 None。”

    通过包含 KeySpec 的值,我们最终创建了一个使用默认旧提供程序 ( Microsoft Strong Cryptographic Provider) 的证书。

    我们该如何解决这个问题?只需将该属性替换为以下两个即可:

    KeyUsage = 'CertSign'
    KeyUsageProperty = 'Sign'
    

    最后的例子看起来像这样:

     $params = @{
         Type = 'Custom'
         Subject = 'CN=Your Subject Here'
         KeyExportPolicy = 'Exportable'
         KeyUsage = 'CertSign'
         KeyUsageProperty = 'Sign'
         KeyLength = 2048
         HashAlgorithm = 'sha256'
         NotAfter = (Get-Date).AddYears(2)
         CertStoreLocation = 'Cert:\CurrentUser\My' 
    } 
    $cert = New-SelfSignedCertificate @params
    

    如果您在此之后运行此命令:certutil -user -store My 您应该在该证书后面看到一行Provider = Microsoft Software Key Storage Provider。

    • 1

相关问题

  • 为 IIS 7.0 问题创建证书

  • CodeCollaborator svn 访问

  • 为 IIS6 自行生成 SSL 证书?

  • 如何模拟连接到 HTTPS 并记录握手?

  • SQL Server 2000 加密证书

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve