Authenticode、SPC和Java CodeSign的区别?

myzjeezk  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(88)

大多数CA都在不同的“产品”中销售代码签名证书,如Verisign或Certum:

  • Microsoft Authenticode -“允许您对EXE、OCX、DLL、bla...进行签名”
  • Java CodeSign -“允许您对Java代码进行签名”
  • 软件发行商证书-“允许您对软件进行签名”

好吧,我真的很困惑。这些产品之间有什么区别-除了价格?我问过Verisign和其他CA几次,因为我很好奇,但没有得到答案。
我从Certum CA获得了Authenticode证书。我在Internet Explorer中注册了它,将其导出为PKCS#12 PFX,并可以签署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,那么,如果所有的“CodeSigning”证书在技术上都是平等的,为什么我必须决定我是想成为一个“Java开发人员”还是“Windows开发人员”还是“软件开发人员”呢?
也许在证书中仍然存在差异?也许我在使用Authenticode-certs进行签名时在JAR中没有获得足够的权限?
(PS:我不会将我的软件用于商业用途!)

qij5mzcb

qij5mzcb1#

正如您所猜测的那样,没有技术上的差异,提供的证书适用于任何代码签名上下文(除了使用Apple颁发的证书的macOS/iOS)。CA只是尝试以适合开发人员环境的格式交付证书。例如,用于Java开发人员签名JAR文件的JKS文件,SPC文件(即DER编码的PKCS#7证书)或用于Authenticode的PKCS#12文件。
代码签名工具通常接受各种密钥和证书格式:

  • signtool可以使用PKCS#12密钥库和PKV+SPC文件进行Authenticode签名
  • keytool可以使用PKCS#12和JKS密钥库对JAR文件进行签名
  • Jsign可以使用PKCS#12和JKS密钥存储库或PKV+SPC文件进行Authenticode签名(免责声明:我是作者)
  • osslsigncode PKCS#12密钥存储库或PKV+SPC文件

不管使用什么格式,这些工具都会为给定的文件生成相同的签名(当然签名时间和时间戳除外)。

相关问题