当前位置: 首页 > 知识库问答 >
问题:

cngkey.create中不支持请求的操作

牧信厚
2023-03-14

我正在尝试在C#程序集中(以.NET4.0)动态(编程方式)生成一个自签名证书,作为根CA生成其他证书。证书不需要持久化在Windows证书存储中,我将把它导出为文件。

通过阅读这个问题(特别是@dthorpe的答案),我决定尝试一下CLR安全性。

CLR Security库在CngKey类上放置了一个扩展方法,以生成自签名证书,但我无法成功创建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
  • 我正在运行Windows 7 box(因此它根据MSDN支持RPC)
  • 已在Windows Server 2012盒上试用,出现相同错误
  • 进程以管理员身份运行(因此它无论如何都可以访问所有证书存储)
  • 服务CNG密钥隔离远程过程调用(RPC)正在运行

如有任何帮助,我们将不胜感激。

共有1个答案

唐高卓
2023-03-14

小偏离主题:在google搜索这个问题的过程中,在SO和MSDN上发现了一个带有HRESULT说明和方便的搜索工具的站点(我只是在google上搜索了您的HRESULT代码-2146893783)

我在MSDN上发现了一个主题,其中包含了类似hresult的代码失败,作者提供了一个链接到MSDN关于CNG的文章:

ncrypt_algorithm_group_propertyl“algorithm group”
以空结尾的Unicode字符串,包含对象的算法组的名称。此属性仅适用于键。Microsoft密钥存储提供程序返回下列标识符:

    null

我还在MSDN上找到了一篇关于CNG密钥存储提供商的文章,其中包含类似的算法列表:

  • Diffie-Hellman(DH)
    秘密协议和密钥交换,512到4096,以64位增量
  • 数字签名算法(DSA)签名,512到1024(64位增量)
  • 椭圆曲线Diffie-Hellman(ECDH)秘密协议和密钥交换,<代码>P256,P384,P521 椭圆曲线数字签名算法(ECDSA)签名, P256,P384,P521
  • RSA非对称加密和签名,512到16384(64位增量)

因此,正如您所说的,您只尝试了SHA1SHA256SHA512MD5,也许您只需要使用列表中的其他算法?你可以找到上面提到的那些:

    null
    null
var cngKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256, null,
    new CngKeyCreationParameters { ExportPolicy = CngExportPolicies.AllowPlaintextExport });
 类似资料:
  • 多请求支持 控制台编辑器允许您编写相互层叠的多个请求,像在控制台章节展示中那样,您可以通过定位光标并使用动作菜单向 Elasticsearch 提交请求。类似的,您可以一次选择多个请求: 图 5. 选择多个请求 控制台会依次提交请求到 Elasticsearch ,并将 Elasticsearch 返回的结果显示在右边窗口。这在调试问题或在多个场景中尝试查询组合时会非常方便。 选择多个请求还允许您

  • 我正在处理一个java springboot项目和rest api,我需要在其中一个uri中传递参数,当我使用它时,我会遇到“request method GET not supported”错误 当我使用时它工作正常 但我需要url有“?”在传递参数之前,所以当我替换 用这个 我得到get方法不受支持的错误。

  • 我正在编写一个控制器来处理来自AJAX的帖子。我一直收到一个错误,那篇文章不受支持。我以前在尝试创建后控制器方法时从未遇到过以下错误,我希望有人能发现我在哪里搞砸了。 这是我为控制控制器中的帖子而编写的方法: 使用JQuery 1.10,这是请求它的Ajax调用: 我知道POST地址是正确的,因为将它转换成GET请求就可以了。此外,我还编写了其他POST请求,它们在同一个控制器类中也能正常工作。任

  • login.jsp 用户列表.jsp AppController.java 有2页:login.jsp-起始页,其中包括与登录和密码填充的形式-userlist.jsp结果列表“显示数据库中所有用户持久化”..首先显示登录页面,当我单击提交按钮时,我得到了这个错误:org . spring framework . web . servlet . pagenotfound-不支持请求方法“POST”

  • 我试图在这里输入代码`@RequestMapping(value=“/test”,method=RequestMethod.POST),但错误代码为 网状物xml是 springmvc.xmlindex.jsp I input submit botton brower为错误HTTP Status 405-请求方法'GET'不受支持类型状态报告消息请求方法'GET'不受支持描述指定的HTTP方法不允

  • 下面是我的方法 当调用GET request时,它的工作很好,但是当我们调用POST request和request payload checkout_token=xxxx时,我得到以下错误 编辑 甚至我尝试删除所有参数,但仍然没有运气到目前为止。