我想更改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,而我只需要特定的一个。
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());