【问题标题】:Use key / certificate on ukey to sign data使用 ukey 上的密钥/证书对数据进行签名
【发布时间】:2018-06-11 10:01:24
【问题描述】:

我想从 ukey 获取证书,并签署数据。现在我可以搞定它了,并且成功的做了一个控制台应用程序。但是当我将它作为 Internet Explorer 的 OCX 控件时,它就不起作用了。

当我使用以下功能时:

CryptAcquireContext(&hProvder, NULL, my_provder_name, PROV_RSA_FULL, 0)

失败,返回nte_bad_keyset

当我使用CRYPT_NEWKEYSETCRYPT_MACHINE_KEYSET 而不是0 时,签名数据失败。

如何使用 ukey 创建签名?

【问题讨论】:

  • 欢迎来到 StackOverflow!你能链接到你正在谈论的“ukey”吗?请注意,您的问题包含的代码量非常少,在问题底部添加更多代码可能会更好地指示您面临的问题。请始终为您的平台使用至少一个标签(我猜是 C++,如果不正确请调整)并使用高度可见的标签(例如 cryptography 以及更具体的标签,例如 digital-signature)\。

标签: c++ cryptography digital-signature cryptoapi ocx


【解决方案1】:

CryptAcquireContext(&hProvder, NULL, my_provder_name, PROV_RSA_FULL, 0);

您想获得可能有助于签名文件的 csp。在桌面应用程序中,您可以使用带有这些参数的函数,例如这种情况。但在浏览器中,您不能。 我们想要获取与当前用户关联的默认密钥容器。但是,当创建证书时,它们可能被放置在默认容器以外的密钥容器中,因此默认容器不存在。 为什么? 问题似乎源于第二个参数。 因此,我们必须指定密钥容器的名称作为第二个参数。 像这样: CryptAcquireContext(&hProvder, container_name, my_provder_name, PROV_RSA_FULL, 0);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2019-07-02
  • 1970-01-01
  • 2013-02-27
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多