我正在寻找Java 代码签名证书,所以我的Java小程序不会抛出这种可怕的安全警告。 然而,我发现所有给他们收费的地方(在我看来)收费太多,比如每年超过200美元。 在进行研究时,代码签名证书似乎与SSL证书几乎完全相同。

我的主要问题是:是否可以购买SSL证书,但是用它来签署Java小程序?

===============>>#1 票数:39 已采纳

简短的回答:不,他们是不同的。

答案很长:它是相同类型的证书,它使用相同的加密软件,但证书上有标志,表明允许使用的是什么。 代码签名和Web服务器是不同的用途。

===============>>#2 票数:4

当我在Firefox(等)中导入新的CA证书时,我可以选择使用我信任的证书:

  • 签名服务器
  • 签名代码(就像你的小程序一样)
  • 签署电子邮件证书

所以对我来说答案是:是的,它们是一样的。 此外,为什么不用OpenSSL生成自己的(在Unix上使用man openssl,man x509,man req等)? 您是想安静地发出警告, 还是希望其他您从未见过的人信任您的代码? 如果您不需要其他用户将信任链接到与其浏览器,操作系统等捆绑在一起的锚CA,则使用OpenSSL生成您自己的。

并询问“我如何使用OpenSSL生成自己的证书?” 如果后者是你的选择。

===============>>#3 票数:1

X.509证书可能包括密钥用法字段 (KU)和扩展密钥用法字段 (EKU)。 描述如何为RIA创建签名Oracle技术说明创建了一个没有任何密钥使用标记的证书,这样可以正常工作(如果可以让受信任的CA签署它)

但是越来越多,CA发布了具有这些关键用法字段的证书。 如果存在,这些字段会限制证书的使用。 java插件检查EndEntityChecker中是否存在这些字段:

/**
 * Check whether this certificate can be used for code signing.
 * @throws CertificateException if not.
 */
private void checkCodeSigning(X509Certificate cert)
        throws CertificateException {
    Set<String> exts = getCriticalExtensions(cert);

    if (checkKeyUsage(cert, KU_SIGNATURE) == false) {
        throw new ValidatorException
           ("KeyUsage does not allow digital signatures",
            ValidatorException.T_EE_EXTENSIONS, cert);
    }

    if (checkEKU(cert, exts, OID_EKU_CODE_SIGNING) == false) {
        throw new ValidatorException
            ("Extended key usage does not permit use for code signing",
            ValidatorException.T_EE_EXTENSIONS, cert);
    }

    if (!SimpleValidator.getNetscapeCertTypeBit(cert, NSCT_SSL_CLIENT)) {
        throw new ValidatorException
            ("Netscape cert type does not permit use for SSL client",
            ValidatorException.T_EE_EXTENSIONS, cert);
    }

    // do not check Netscape cert type for JCE code signing checks
    // (some certs were issued with incorrect extensions)
    if (variant.equals(Validator.VAR_JCE_SIGNING) == false) {
        if (!SimpleValidator.getNetscapeCertTypeBit(cert, NSCT_CODE_SIGNING)) {
            throw new ValidatorException
                ("Netscape cert type does not permit use for code signing",
                ValidatorException.T_EE_EXTENSIONS, cert);
        }
        exts.remove(SimpleValidator.OID_NETSCAPE_CERT_TYPE);
    }

    // remove extensions we checked
    exts.remove(SimpleValidator.OID_KEY_USAGE);
    exts.remove(SimpleValidator.OID_EXTENDED_KEY_USAGE);

    checkRemainingExtensions(exts);
}

检查方法如下:

/**
 * Utility method checking if the extended key usage extension in
 * certificate cert allows use for expectedEKU.
 */
private boolean checkEKU(X509Certificate cert, Set<String> exts,
        String expectedEKU) throws CertificateException {
    List<String> eku = cert.getExtendedKeyUsage();
    if (eku == null) {
        return true;
    }
    return eku.contains(expectedEKU) || eku.contains(OID_EKU_ANY_USAGE);
}

因此,如果未指定KU或EKU,则KU或EKU检查程序将返回true。

  • 如果指定了KU,则数字签名 KU应该是其中之一。
  • 如果指定了任何EKU,则应指定EKU 代码签名 (由oid 1.3.6.1.5.5.7.3.3标识)或EKU 任何用法 (由oid 2.5.29.37.0标识)。

最后, checkRemainingExtensions方法检查剩余的关键EKU。 允许存在的唯一其他关键EKU是

  • 基本约束 (oid“2.5.29.19”)和
  • subject alt name (oid 2.5.29.17)

如果找到任何其他关键EKU,则返回false。

===============>>#4 票数:1

Thawte 在这里提供代码签名证书。 我想其他证书颁发机构也提供这项服务。 您还可以使用Java keytool创建自签名证书。

  ask by community wiki translate from so

未解决问题?本站智能推荐:

3回复

用于HTTP,ActiveX签名和大多数手机SDK的SSL证书

这主要是部署问题,而不是编程问题。 如果要从CA购买SSL证书,是否可以使用它来签署其他应用程序(例如symbian,android,iphone的应用程序)? 如果是这样,您会推荐什么(再)卖家?
2回复

是否可以使用SSL证书签署我的程序集?

试图用一块石头杀死两只鸟。 我不熟悉证书,它们是如何工作的等等。如果我的企业网站有SSL证书,我可以用它来签署我的程序集并让它们受到信任吗? 我想不是,但认为值得问。
1回复

代码签名与加密

因此,我正在寻求一些帮助,大部分是在理解代码签名和加密过程方面,因为我在这两个主题上仍然不满意。 我认为我的理解: 首先需要一个KEY,它是使​​用某种加密算法(RSA / SHA1 / etc)生成的 使用此密钥,我们创建一个证书签名请求或CSR(与X509有关吗?),
10回复

如何从GoDaddy导入证书以进行Java代码签名? [关闭]

我需要能够使用来自CA的证书来签署jar文件。 我按照GoDaddy文档中有关如何执行此操作的说明操作: http : //support.godaddy.com/help/article/4780/signing-java-code 但是,步骤3需要导入从GoDaddy网站获得的证
1回复

必须从Java控制台导入代码签名证书才能正确查看Publisher,并避免签名错误

我们已经购买了代码签名证书,并且我已使用jarsigner命令和.pfx格式的证书对此证书签署了Applet jar。 但是,当在浏览器中加载小程序时,它显示“未知的发布者”和“无法验证数字签名”错误。如果我从Java控制面板->安全性->证书->签名者CA导入证书,发布者开
2回复

Java签名罐与服务器证书

是否可以使用服务器证书签署java Web启动应用程序? 我想知道的是它是否有效。 我的服务器有一个可靠的证书,我想重复使用相同的证书来签署一个应用程序。 现在,我有这个警告: 此jar包含其签名者证书的ExtendedKeyUsage扩展不允许代码签名的条目。 此jar包
1回复

自签名jar的证书检索问题

我有一个用Java密钥工具生成的密钥自签名的jar。 在运行时,我尝试使用以下代码检索证书: 当我的jar在独立的命令行Java应用程序中使用时,这可以很好地工作。 但是,当我在Weblogic服务器中部署的Web应用程序中使用此jar时,getCertificates()调用将返回
1回复

我可以使用证书存储中的现有证书对JAR文件进行签名吗?

我在Windows的MMC证书管理单元中安装了代码签名证书。 在签署exe时,我使用如下命令: 这将从我的证书存储区中找到正确的证书,并在不需要磁盘上的pfx文件的情况下对exe进行签名。 有没有办法用Java做类似的事情? 我已经按照这些说明进行操作,但这需要磁盘上的
5回复

J2ME - 代码签名 - 什么是适用于所有手机的证书,如诺基亚,三星,Micromax,LG?

我正在创建一个MP3Player,它将访问设备存储卡以列出歌曲。为此我使用文件连接API,所以像诺基亚这样的设备继续请求许可。为了克服这个问题,jar文件必须签名。任何人都知道哪种CA被诺基亚,三星,索尼,LG,karbonn,Micromax甚至中国设备等所有设备广泛接受? 有没有人知道
1回复

Java 9弃用SHA1证书,还是其他问题?

[ 更新 ]甲骨文刚刚修改了加密路线图( https://www.java.com/en/jre-jdk-cryptoroadmap.html ),他们不会弃用SHA-1进行代码签名: 2017-03-14 Target date changed from 2017-04-18 to 2017-