【发布时间】:2015-08-26 17:03:42
【问题描述】:
我是 UniversalADBDriver 的开发者,这是一个在用户计算机上创建自签名 Android USB 驱动程序的工具。
安装程序和安装包的源代码: https://github.com/koush/UniversalAdbDriver
该工具会生成一个密钥对并将证书添加到用户的密钥库中,然后对驱动程序文件进行签名。这一直很好,直到 Windows 10,它莫名其妙地停止工作。我手动运行命令行:
The following certificates were considered:
Issued to: UniversalADB
Issued by: UniversalADB
Expires: Fri Aug 25 17:00:00 2017
SHA1 hash: C8701DF4CDC7DD75813400AD2B3B4C2EFDA4E662
After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
在 Windows 10 上,证书被“私钥过滤器”过滤掉。不知道那是什么,上面没有任何文档。
更新
我发现通过 Windows 10 上的安装程序调用时,makecert.exe 或 X509Store.add 都无法将证书/密钥写入当前用户存储。但是,本地计算机存储中的证书放置正确。我不确定为什么会这样。所以基本上,私钥没有正确放置在存储中,因此签名失败。在命令行上手动运行相同的步骤是可行的。但是,我仍然需要弄清楚为什么私钥没有保留在商店中。
【问题讨论】:
-
@Richard,是的,测试签名过程正是我想要做的。
-
@koush,“通过安装程序调用”是什么意思?您是否在自定义操作中执行此操作?
-
@StenaviN makecert 在安装过程中通过安装程序 MSI 调用。安装过程执行以下操作:生成自签名证书,将其添加到证书存储(或至少尝试),并签署驱动程序。 github.com/koush/UniversalAdbDriver
-
@StenavIN 正确,这是自定义操作。