是Java代码签字证书的同SSL certificates?
-
09-06-2019 - |
解决方案
简短的回答:不,他们是不同的。
只要回答:它是同类型的证书,它使用的同样的加密软件,但该证书具有标志,表明什么是允许的用途。代码签字和网络服务器是不同的用途。
其他提示
当我进一个新的CA证书在火狐(等等)。 我有选择其证书使用我的信任:
- 登录服务器
- 符号代码(喜欢你的小程序)
- 签署电子邮件证明
所以我的回答是:是的,它们是相同的。此外,为什么不产生自己 OpenSSL (男人openssl,人x509,人req,等等。在Unix)?你想要的只是安静下来的警告 或 做你想做的 其他的 人你从来没有见过信任你的代码吗?如果你不需要其他用户链信任锚CA的捆绑在他们的浏览器、操作系统等, 然后使用OpenSSL产生自己的。
并问"我怎么使用OpenSSL产生我自己的证书?"如果后者是你的选择。
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)
如果它发现的任何其他关键易酷,它返回错误的。
不隶属于 StackOverflow