我四处寻找一个Java 代码签名 证书,所以我Java小不扔了这种可怕的安全警告。然而,所有的地方,我已经发现了为他们提供充(在我的意见)的方式太多了,就像有超过200美元,每年。边做研究,一个代码签字证书似乎完全相同的一个 SSL 证书。

主要的问题我有:它是可能的购买SSL证书,但是使用它登录Java小?

有帮助吗?

解决方案

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

只要回答:它是同类型的证书,它使用的同样的加密软件,但该证书具有标志,表明什么是允许的用途。代码签字和网络服务器是不同的用途。

其他提示

当我进一个新的CA证书在火狐(等等)。 我有选择其证书使用我的信任:

  • 登录服务器
  • 符号代码(喜欢你的小程序)
  • 签署电子邮件证明

所以我的回答是:是的,它们是相同的。此外,为什么不产生自己 OpenSSL (男人openssl,人x509,人req,等等。在Unix)?你想要的只是安静下来的警告 做你想做的 其他的 人你从来没有见过信任你的代码吗?如果你不需要其他用户链信任锚CA的捆绑在他们的浏览器、操作系统等, 然后使用OpenSSL产生自己的。

并问"我怎么使用OpenSSL产生我自己的证书?"如果后者是你的选择。

Thawte提供代码签字证书 在这里,.我想其他的证书当局提供这种服务。你还可以创建自签证书, Java密钥工具.

X.509证书可能包括 关键领域的使用情况 (区)和 扩展的关键领域的使用情况 (易酷)。的 Oracle技术说明,描述如何创建签RIA的 创建了一个证书没有任何关键用标志,其工作只是罚款(如果可以获得一个可信的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);
}

因此,如果没有区或易酷指定区或易酷检查愉快地返回正确的。

  • 如果区的指定, 数字签名 区应该是他们中的一个。
  • 如果任何易酷的规定,无论是易酷 代码签名 (标识oid1.3.6.1.5.5.7.3.3)或者易酷 任何使用情况 (标识oid2.5.29.37.0)应在被指定为好。

最后, checkRemainingExtensions 方法,检查其余的关键易酷的。唯一的其他关键易酷的允许本是

  • 基本制约因素 (oid"2.5.29.19")和
  • 受alt的名字 (oid2.5.29.17)

如果它发现的任何其他关键易酷,它返回错误的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top