我正在尝试在C#程序集中(以.NET 4.0
为目标)动态(以编程方式)生成自签名证书,以用作生成其他证书的根CA。该证书不需要保留在Windows证书存储区中,我将其导出为文件。
通过阅读this question(尤其是@dthorpe's answer),我决定尝试CLR Security。CLR Security
库在CngKey class上添加了扩展方法以生成自签名证书,但是我无法成功创建带有以下内容的CngKey
实例:
var key = CngKey.Create(CngAlgorithm.Sha1); //same with Sha256, Sha512 and MD5
//or
var key = CngKey.Create(CngAlgorithm.Sha1, null, new CngKeyCreationParameters()
{
ExportPolicy = CngExportPolicies.AllowExport,
KeyUsage = CngKeyUsages.AllUsages,
KeyCreationOptions = CngKeyCreationOptions.MachineKey,
});
这些行中的任何一条都会引发异常:
Source=System.Core
StackTrace:
at System.Security.Cryptography.NCryptNative.CreatePersistedKey(SafeNCryptProviderHandle provider, String algorithm, String name, CngKeyCreationOptions options)
at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters)
at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm)
at Tests.Program.Main(String[] args) at Program.cs:line 51
通过SO和互联网进行搜索,我检查了以下内容:
CNG Key Isolation
和Remote Procedure Call (RPC)
正在运行任何帮助,将不胜感激。
最佳答案
小题外话:在Google搜索此问题期间,在SO和MSDN上找到了a site with HRESULT
descriptions和便捷的搜索工具(我只是用Google搜索您的HRESULT
代码-2146893783
)
我发现了一个topic on MSDN,其中包含失败的代码,并带有类似的HRESULT
,而作者提供了一个link to MSDN article about CNG:
我还在MSDN上找到了有关CNG Key Storage Providers的文章,其中包含类似的算法列表:
因此,正如您所说的,您只尝试了Sha1
,Sha256
,Sha512
和MD5
,也许您只是使用了另一个algorithm from list available?您可以找到上面提到的那些:
Here other developers successfully created其中之一,并能够将其导出:
var cngKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256, null,
new CngKeyCreationParameters { ExportPolicy = CngExportPolicies.AllowPlaintextExport });
关于c# - CngKey.Create不支持请求的操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40912625/