从CRMF请求到CertificateRequest(PKCS#10)签名

时间:2012-05-09 19:32:32

标签: bouncycastle asn.1 csr

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

我将Base 64 CRMFRequest作为ASN1InputStream类型。

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

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

但该对象没有getter

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

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

distributionPoint,unotice,policyOID,subjectAlternativeNameDN

我知道它以

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

但我不知道如何将这些参数填充到

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

很抱歉,如果有些问题显而易见......但我找不到解决方案..

提前致谢

1 个答案:

答案 0 :(得分:0)

您将无法将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想要的事情,因此无论如何它都必须审查与公钥相关的属性以及其他方式的身份。