Java、Adobe AIR、Authenticode、VBS 的代码签名证书是否不同?

8
我们拥有一张由GlobalSign购买的代码签名证书,用于Authenticode签名。现在我们需要签署Java小程序和不久后的Adobe AIR模块(小程序?)。问题是:从技术角度来看,如果它们由同一CA(例如Comodo或GlobalSign)发行,那么Authenticode证书、Java证书或AIR证书之间是否存在任何区别?如果可以互相替代,我就不明白为什么要购买不同的证书了。
我知道证书的密钥使用字段必须相同(代码签名),但是这些证书中可能存在扩展代码使用、策略或其他扩展的差异。如果有持有同一CA颁发的两种或更多类型的代码签名证书的人能够为我检查一下,我将不胜感激。
3个回答

5
http://www.adobe.com/devnet/air/articles/signing_air_applications.html上有明确的声明:

"开发者可以使用任何由任何CA提供的3级高保真证书来签署Adobe AIR应用程序。"

不幸的是,我找不到类似Java的内容。无论各个平台的最低证书要求如何,您最好联系现有的证书提供商,询问他们为这些平台提供的证书之间是否存在任何有意义的差异。

Verisign网站上的一些废话表明,证书交付给购买者的格式是其提供的唯一实际区别,但他们并没有直接说明这一点,所以谁知道呢...?


谢谢您提供的参考。这为该主题提供了一些启示,但并不多。从技术上讲,对于AIR,任何代码签名证书都可以使用,但是(a)对于其他语言(Java、VBS)可能不适用,(b)可能存在我忽略的某些法律限制(我确实阅读了GlobalSign的政策)。顺便说一句:我们使用GlobalSign代码签名证书来签署内核模式驱动程序,因此它是为特定目的购买的,现在我想将其用于Java模块(在另一个项目中)。 - Eugene Mayevski 'Callback

2
根据RFC 5280,密钥使用扩展只能决定证书是否可用于代码签名。在RFC中似乎没有任何内容可以限制您签署Java代码或AIR或其他任何内容。这似乎意味着,如果您可以签署一段代码(或任何其他类型的非密钥数据),则可以签署任何内容。
话虽如此,您的证书可能具有特定于CA的扩展。如果没有看到证书,则很难确定是否存在限制。
从技术角度来看,只要客户端(即浏览器,如果我们谈论小程序)识别CA并且满意您的密钥使用和证书类型组合(DIGITAL_SIGNATURE和OBJECT_SIGNING),那么您应该没问题。

这并不完全正确,原因如下。例如,常规SSL证书和EV SSL证书的密钥使用是相同的。它是包含在EV SSL证书中的策略OID,定义了这是EV SSL证书。每个发行EV SSL证书的“认证”CA的策略ID都不同,并且策略ID列表会不时更新。因此,我猜可能会有一些自定义扩展(或扩展密钥用途中的值),指定证书仅用于签署某些类别的代码对象。这就是问题的来源。 - Eugene Mayevski 'Callback
我确实怀疑可能会有自定义扩展会导致问题,但从RFC上并不清楚,而且如果浏览器不识别扩展名,它是否重要也不清楚。浏览器可以忽略它们不理解的非关键扩展,对吧?无论如何,我想我可以把我的答案改成“我不知道”。看来你需要查看你所拥有的证书的具体内容。你能发布证书相关部分吗? - Cameron Skinner
@Cameron 如果我有那些证书,就不会有问题了。我正在尝试找出,从技术或法律角度来看,为不同的代码对象类购买不同的证书是否有意义。到目前为止,看起来我们需要再购买一个(我们已经有一个了)并进行比较。 - Eugene Mayevski 'Callback
@Eugene 是的,我明白你的意思。我以为你有一个证书就足够检查了,但我同意比较两个是回答问题的最好方法。 - Cameron Skinner
@Cameron 我有一个关于 Authenticode 的,但它太泛泛了,即适用于许多类别的代码对象。AIR 和 Java 证书更具体,但我没有这些进行检查 :( - Eugene Mayevski 'Callback
@Eugene:你不需要购买证书就能查看它。只要你可以访问任何已签名代码包,你就可以检索证书。话虽如此,仅仅因为证书有扩展名,并不能说明它实际上被相关的代码主机所使用,因此检查证书可能是无用的。 - Nicole Calinoiu

1

看起来任何代码签名证书都适用于任何提到的平台。我向GlobalSign支持团队询问了差异,但他们没有回应,不过在那之后不久,他们已经更改了网页,现在您将购买一个适用于所有平台的代码签名证书。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接