【发布时间】:2019-03-02 23:41:00
【问题描述】:
我需要在我的证书中添加一个新的 OID 扩展 1.3.6.1.5.5.7.1.26。我的证书中有此 OID 扩展,但出现以下错误:
证书扩展:10 [1]:ObjectId:1.3.6.1.5.5.7.1.26 Criticality=false
未知扩展:DER 编码的 OCTET 字符串 =
0000: 04 0C 30 0A 13 08 33 39 20 64 63 20 32 62 ..0...
39 直流 2b
我希望这个 OID 能够像 AuthorityInfoAccess 等其他扩展一样被识别。
我需要编辑 Bouncy Castle X509 类的 jar 吗?
我使用 ACME4j 作为客户端,使用 Letsencrypt Boulder 作为我的服务器。
这是用于注册证书的 CSR Builder 代码。
public void sign(KeyPair keypair) throws IOException {
//Security.addProvider(new BouncyCastleProvider());
Objects.requireNonNull(keypair, "keypair");
if (namelist.isEmpty()) {
throw new IllegalStateException("No domain was set");
}
try {
GeneralName[] gns = new GeneralName[namelist.size()];
for (int ix = 0; ix < namelist.size(); ix++) {
gns[ix] = new GeneralName(GeneralName.dNSName,namelist.get(ix));
}
SignatureAlgorithmIdentifierFinder algFinder = new
DefaultSignatureAlgorithmIdentifierFinder();
GeneralNames subjectAltName = new GeneralNames(gns);
PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(namebuilder.build(), keypair.getPublic());
ExtensionsGenerator extensionsGenerator = new ExtensionsGenerator();
extensionsGenerator.addExtension(Extension.subjectAlternativeName, false, subjectAltName);
//extensionsGenerator.addExtension(Extension.authorityInfoAccess, true, subjectAltName);
//extensionsGenerator.addExtension(new ASN1ObjectIdentifier("TBD"), false, subjectAltName);
//extensionsGenerator.addExtension(new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.24"), false, subjectAltName);
extensionsGenerator.addExtension(new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.26").intern(), false, subjectAltName);
//extentionsGenerator.addExtension();
p10Builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest, extensionsGenerator.generate());
PrivateKey pk = keypair.getPrivate();
/*JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder(
pk instanceof ECKey ? EC_SIGNATURE_ALG : EC_SIGNATURE_ALG);
ContentSigner signer = csBuilder.build(pk);*/
if(pk instanceof ECKey)
{
AlgorithmIdentifier sigAlg = algFinder.find("SHA1withECDSA");
AlgorithmIdentifier digAlg = new DefaultDigestAlgorithmIdentifierFinder().
find(sigAlg);
ContentSigner signer = new JcaContentSignerBuilder("SHA256with"+pk.getAlgorithm()).setProvider(BOUNCY_CASTL E_PROVIDER).build(keypair.getPrivate());
csr=p10Builder.build(signer);
System.out.println("ZIPED CSR ECDSA: "+csr);
}
else
{
ContentSigner signer = new JcaContentSignerBuilder("SHA256with"+pk.getAlgorithm()).build(keypair.getPrivate ());
csr = p10Builder.build(signer);
System.out.println("ZIPED CSR RSA: "+csr);
}
//csr = p10Builder.build(signer);
} catch (Exception ex) {
ex.printStackTrace();;
}
}
【问题讨论】:
-
请包含您用于生成和验证证书的代码以及错误的完整堆栈跟踪。
-
请同时添加您用于解析证书的工具(其中发生错误)。是
openssl还是带有/不带 bouncycastle 的普通 java? -
我已经搜索过这个 OID 但找不到它:oid-info.com/get/1.3.6.1.5.5.7.1.26(也许这就是它不为人知的原因)。它应该是什么,针对特定上下文的自定义扩展?在上面的代码中,您向其中添加了
subjectAltName,但 Subject Alternative Name 已经有自己的 OID,不应将其添加到 1.3.6.1.5.5.7.1.26。 1.3.6.1.5.5.7.1.26 应该是什么值? -
您可以在此链接datatracker.ietf.org/doc/draft-ietf-stir-certificates/… 中找到有关此 OID 的详细信息,您可以在那里找到语法。我刚刚添加了主题备用名称,但它应该具有要传递的 SPID 值之类的东西。但为此,我需要一个具有正确 ASN1 编码值的 TN 授权列表的类!
-
错误信息“未知扩展”来自哪个应用程序?
标签: ssl-certificate x509certificate bouncycastle csr java-security