我的 CSR inf 生成有什么问题?给出 Keyspec 错误

What's wrong with my CSR inf generation? Giving a Keyspec error

我正在编写一个 C# 程序,它将创建 inf 文件,然后 运行 一个 certreq -new 来生成 CSR 并输出内容 - 在旧机器上(Windows 服务器 2008,对于实例 ) 我收到一般错误

"[NewRequest] KeyAlgorithm = "ECDSA_P256" <=> KeySpec?

手动编辑 CSR 文件并完全删除 KeySpec 似乎可以使 CSR 通过,但我看到的每个指南似乎都提到了 KeySpec,所以我很困惑是我做错了什么。

string[] csrPairs = {"[NewRequest]", subjectLine, "Exportable = true", "ExportableEncrypted = true", "HashAlgorithm = sha256",
      "KeyAlgorithm = " + keyAlgorithm, "KeyLength = " + keysize, "KeySpec = 1", "MachineKeySet = true", "ProviderName = \"Microsoft Software Key Storage Provider\"","RequestType = PKCS10", "SMIME = false", "UseExistingKeySet = false"};

这是我用来生成 CSR 的代码,似乎适用于 Windows 10,但不适用于 Windows 2008 服务器。

任何帮助将不胜感激 - 关于 Windows Serer 2008 有什么我没有想到的吗?或者我的新电脑会为 .net 设置而另一台电脑没有设置的东西? (目标版本 3.5)

旁注 - 对理解 keyspec 的任何帮助也会很棒。似乎“1”意味着它可以签名和加密,“2”只能签名 - 不确定默认值或 0 的作用,或者我是否应该在这里做任何其他事情。

嗯,我想我明白了一些事情。

CNG(密码学 API:下一代)提供者不使用 KeySpec,它只是设置为 0 - 看起来这个设置可能会弄乱一些东西,比如创建代码签名 CSR。

常规 CSP/Legacy 提供商似乎能够在某些情况下确定您想要的密钥,因此设置 KeySpec 但没有密钥算法可以正常工作 - 至少从我的测试来看是这样。