【问题标题】:From CRMF request into CertificateRequest (PKCS#10) Signature从 CRMF 请求到 CertificateRequest (PKCS#10) 签名
【发布时间】:2012-05-09 19:32:31
【问题描述】:

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

我将 Base 64 CRMFRequest 作为 ASN1InputStream 类型。

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

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

但是对象没有getter

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

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

distributionPoint、unnotice、policyOID、subjectAlternativeNameDN

我知道它以

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

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

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

对不起,如果有些问题似乎很明显......但我找不到解决方案..

提前致谢

【问题讨论】:

    标签: bouncycastle asn.1 csr


    【解决方案1】:

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

    CSR is structured like this 并由主题的私钥签名:

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

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

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

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

    【讨论】:

    • 感谢您的回答...是的,但是我看到 CRMF 有一个名为 Proof Of Possession 的东西,它在里面带来了一个签名...我认为私钥签署了公钥并添加了这个按顺序(嗯,事实上,我希望如此)。因为 CA 和 RA 已经开发好了,而做出改变的团队拒绝做出任何改变。这个发展只是看了PKCS10的CSR。我找到的唯一解决方案是将 CRMF 拆开并组装成 CSR
    • 你不能。根据定义,签名确保匹配的确切内容。您可以使用任何其他私钥对重构的certificationRequestInfo 进行签名,但是任何验证 PKCS#10 规范所说的内容(必须由主题的私钥签名)的内容都将失败。如果 CSR 没有验证签名(这不一定是什么大问题,只要有其他验证),它可能会起作用。
    • 如果您需要修改CA代码,您可以查看this example:它不完整,但会告诉您如何处理PKCS#10、CRMF和SPKAC。
    • 真的谢谢你...我要试试
    • 我查看了源代码......但我想我需要知道什么是对象“DefaultCertificate”。我正在审查它知道。我可以看到 PEM-CSR 和 SPKAC 可以转换为 PKCS#11-CSR,但是 CRMF 被反汇编并被分段传递给这个对象......我理解正确吗?那么,可以在没有私钥或公钥签名的情况下创建证书(DER)吗? (这是因为我知道 CSR 带来了一个公钥和这个公钥的签名,由私钥在生成的那一刻生成,这些私钥保持在浏览器密钥库或智能卡中)
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2011-09-21
    • 2010-11-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多