大多数 CA 都在不同的“产品”中销售代码签名证书,例如 Verisign 或 Certum:
Microsoft Authenticode - “允许您签署 EXE、OCX、DLL、bla...”
Java CodeSign - “允许您签署 Java 代码”
软件发行商证书 - “允许您签署软件”
好吧,我真的对此感到困惑。所有这些产品之间有什么区别 - 除了价格?由于好奇,我问了 Verisign 和其他 CA 几次,但没有得到答复。
我从 Certum CA 获得了 Authenticode 证书。我在 Internet Explorer 中注册了它,将其导出为 PKCS#12 PFX,并且可以按照 promise 对 EXE、DLL 等进行签名。
现在...我尝试使用 keytool 将此 PFX 导入 Java,然后尝试签署 JAR。它奏效了!
然后是神秘的“软件发行商证书”作为产品。我不知道我可以/应该用那个签名什么... Mac? Linux? “Microsoft Authenticode”不是软件发布者证书吗?不是EXE“软件”吗?这真的让我很困惑。
所以,我现在的问题是:当我订购了 Microsoft Authenticode 证书时,使用它来签名是否违法? JAR 文件或任何其他内容(如果可能)?这些证书之间似乎没有技术差异。所有这些产品都应该具有相同的代码设计 EKU-OID“1.3.6.1.5.5.7.3.3”,这在 EXE、JAR、Adobe Air 和那里还存在的东西之间没有任何区别。那么,如果所有“代码签名”证书在技术上都是平等的,那我为什么还要决定我是想成为“Java 开发人员”还是“Windows 开发人员”还是“软件开发人员”?
也许证书上仍然存在差异?当我使用 Authenticode-certs 进行签名时,也许我在 JAR 中没有足够的权限?
(PS:我没有将我的软件用于商业用途!)
最佳答案
如您所料,技术上没有区别。使用适当的工具链,可以使用用于签署 Java 应用程序的证书来签署 Windows 可执行文件。
例如参见 Jsign ,一种使用 Java keystore 或标准 PKCS#12 keystore 对 Windows 可执行文件进行签名的工具。
关于java - Authenticode、SPC 和 Java CodeSign 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655263/