我的公司(* .mycompany.com)有一个通配符证书,现在可以对安装程序可执行文件进行数字签名。 我使用Signtool.exe生成包含私钥和证书文件(包括中间证书)的pfx文件,但它总是告诉我没有证书符合所有给定的条件。 (在调试输出中,我可以看到通配符证书由EKU过滤器过滤,中间和根证书由私钥过滤器过滤。)
Windows证书管理器说通配符证书只能用于服务器和客户端身份验证。我无法将代码签名添加到中间证书所具有的目的中。
是否可以使用此通配符证书进行代码签名?我错过了什么吗?
答案 0 :(得分:4)
如果您有权访问密钥,则始终可以使用密钥。但在这种情况下,必须告知用于签名的代码忽略扩展密钥的使用。并且 - 更有问题 - 验证程序也必须跳过此检查。
但由于您的证书错过了扩展密钥用法进行代码签名,并且由于存在扩展密钥用法,因此X.509 v3 certificate specs的以下部分有效:
如果存在扩展名,则必须仅使用证书 出于上述目的之一。如果有多种用途 表示申请无需承认所有指示的用途, 只要存在预期目的。证书使用 应用程序可能需要扩展密钥用法扩展名 目前,并指出一个特定的目的,以便 证书可以被该申请接受。
现在可能存在id-kp-serverAuth
,并且由于id-kp-codeSigning
不存在,因此无法使用证书。
由于证书颁发机构签名这些扩展名,您不能简单地更改证书。如果您确实更改了扩展密钥的使用情况,则证书中的签名验证将失败。
请注意,密钥和证书通常是单一用途。如果您需要代码签名证书,则可能需要创建新密钥对&证书要求购买新证书。