0

我做了一个示例代码来了解如何获取 CRMF(mozilla 证书请求)以将其转换为更类似于 PKCS#10 的 CSR

我将 Base 64 CRMFRequest 作为 ASN1InputStream 类型。

我将其转换为 CertReqMsg 类型(Bouncycastle)

当我调试时,我意识到 CertReqMsg 有公钥,另一个数据,如 Subject(CN、O、OU 等)等,但更重要的是,它有一个签名和一个 AlgoritmIdentifier。

但该对象没有吸气剂

如何将签名提取为 DERBitString ...?我需要将它用作 CertificationRequest 对象的参数(它根据我的需要返回 CSR)

顺便说一下,CertificationRequest 需要一个 CertificationRequestInfo 对象作为参数。在其中(CertificationRequestInfo),它接收 Attributes 作为参数。我认为这个属性是这样的:

分发点、通知、policyOID、subjectAlternativeNameDN

我知道它以

    ASN1Set attributes = null;
    attributes = new DERSet();

但我不知道如何填写这个参数

     CertificationRequestInfo info = new CertificationRequestInfo(subject, infoPublicKey, attributes);

抱歉,如果某些问题似乎很明显...但我找不到解决方案..

提前致谢

4

1 回答 1

0

您将无法将 CRMF 格式转换为 PKCS#10 CSR。

CSR的结构如下所示,并由主题的私钥签名:

CertificationRequest ::= SEQUENCE {
    certificationRequestInfo CertificationRequestInfo,
    signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
    signature BIT STRING
}

(本质上,它与自签名 X.509 证书非常相似,没有颁发者和有效期。)

由于当您收到 CRMF 请求时,您将没有主题的私钥,因此您将无法进行此签名。

如果您正在编写某种 CA 软件,那么您实际上并不需要它。处理 CRMF 请求和 CSR 请求或多或少是等效的。无论如何,CA 不应该真的盲目地做 CSR 想要的事情,因此无论如何它都必须以其他方式审查它与公钥和身份相关联的属性。

于 2012-05-10T00:58:48.780 回答