使用BouncyCastleAPI更改Java中CSR的SubjectPublicKeyInfo的OID

问题描述 投票:0回答:1

我想更改CSR中SubjectPublicKeyInfo的OID。但我在 CSR 中获得了特定 OID 和内置 OID。

// Use Bouncy Castle to create a CSR with attributes and a common name
PKCS10CertificationRequestBuilder csrBuilder = new PKCS10CertificationRequestBuilder (
                X500Name.getInstance(AsnToDerEncoding.createSubject()),
                subjectPublicKeyInfo
        );

ASN1ObjectIdentifier objId = new ASN1ObjectIdentifier("Specific OID");
AlgorithmIdentifier algId = new AlgorithmIdentifier(objId);
ASN1BitString derBitString = new DERBitString(keyPair.getPublic().getEncoded());
SubjectPublicKeyInfo subjectPublicKeyInfo = new SubjectPublicKeyInfo(algId, derBitString);

它正在更改 OID,但内置函数采用公钥的特定 OID 并在 CertificateRequestInfo 中提供两个 OID,而我只需要特定的一个。 CSRDecoded

java certificate bouncycastle csr pkcs#10
1个回答
0
投票

Java

PublicKey.getEncoded()
返回SPKI(SubjectPublicKeyInfo)结构,包括包含标准OID的algorithmid;因此,当您将其放入第二个 SPKI 的位串(数据)部分时,您会得到一个带有两个 OID 的嵌套结构。

您显然想要解析第一个 SPKI 以仅提取数据部分,并使用它,您可以使用相同的 BouncyCastle 类来做到这一点:

    SubjectPublicKeyInfo spki = SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded());
    ASN1ObjectIdentifier objId = new ASN1ObjectIdentifier("1.2.3.4");
    AlgorithmIdentifier algId = new AlgorithmIdentifier(objId);
    spki = new SubjectPublicKeyInfo(algId, spki.getPublicKeyData());
© www.soinside.com 2019 - 2024. All rights reserved.