每次CryptSignMessage()调用时都需要密码

时间:2014-09-26 18:03:34

标签: c++ windows digital-signature

我们正在使用未管理的c ++项目中使用microsoft wincrypt实现数字签名 证书存储在USB令牌上。

一切都按预期工作,除非用户多次完成此过程,除非我们的应用程序已关闭并重新启动,否则他们只需要第一次输入证书密码。

我们需要每次签署一些数据时都要向用户提出密码质询。有没有办法“重置”这个过程?

CertOpenSystemStore(NULL,"MY");
CertEnumCertificatesInStore(); // until we find the certificate we want
CryptSignMessage(); // this brings up the password dialog box the first time, but not again
// edited to show closing store and freeing context
CertCloseStore();
CertFreeCertificateContext();
谢谢你!

1 个答案:

答案 0 :(得分:1)

密码的缓存由USB设备的驱动程序控制。通常,这可以通过设备及其驱动程序附带的一些UI应用程序进行配置。

作为最后的手段,您可以将签名过程放到单独的EXE中,并在每次需要签名数据时运行它。这样,将为每个签名操作调用单独的进程,并且不会缓存密码。