我做了一个示例代码,以了解如何获得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);
很抱歉,如果有些问题显而易见......但我找不到解决方案..
提前致谢
答案 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想要的事情,因此无论如何它都必须审查与公钥相关的属性以及其他方式的身份。