我正在编写一个C#程序,该程序将创建inf文件,然后运行certreq -new以生成CSR并输出内容-在较旧的机器(例如Windows Server 2008)上,我遇到了一般错误< / p>
"[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)
旁注-理解关键规格的任何帮助也将非常有用。似乎“ 1”表示可以签名和加密,“ 2”只能签名-不确定默认值或0表示什么,或者我是否应该在此处执行其他任何操作。
答案 0 :(得分:1)
嗯,我想我已经弄明白了。
CNG(密码学API:下一代)提供程序不使用KeySpec,而是将其设置为0-似乎此设置可能会与某些事情混淆,例如创建代码签名CSR。
在某些情况下,常规CSP /传统提供程序似乎能够确定所需的密钥,因此至少在我的测试中,设置KeySpec但没有密钥算法可以正常工作。