【问题标题】:What's wrong with my CSR inf generation? Giving a Keyspec error我的 CSR inf 代有什么问题?给出 Keyspec 错误
【发布时间】:2019-11-07 10:28:52
【问题描述】:

我正在编写一个 C# 程序,它将创建 inf 文件,然后运行 ​​certreq -new 以生成 CSR 并输出内容 - 在较旧的机器上(例如 Windows server 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 Server。

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

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

【问题讨论】:

  • 尝试用= AT_KEYEXCHANGE替换= 1
  • 感谢您的建议!但是,同样的错误。摆脱 KeyAlgorithm 或 KeySpec 字段使它工作得很好——不过,我担心两者的影响。如果我删除 KeyAlgorithm,我是否信任系统来决定我要返回什么?如果我删除 KeySpec,密钥是否可以以人们想要的方式使用...

标签: c# .net windows-server-2008 x509certificate2


【解决方案1】:

嗯,我想我想通了。

CNG ( Cryptography API: Next Generation ) 提供者不使用 KeySpec,它只是设置为 0 - 似乎此设置可能会与某些事情混淆,例如创建代码签名 CSR。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 2023-03-25
    • 2016-04-18
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多