使用java中的额外字段生成PKCS10证书请求

时间:2011-08-08 12:58:26

标签: java certificate x509certificate pki csr

我需要在CSR中添加额外的字段,例如keyusage,regestrationID等。我正在使用Java IBM-sdk60。我已经通过x500名称API了,找不到任何解决方案。 API的帮助将不胜感激。 提前致谢

1 个答案:

答案 0 :(得分:3)

在CSR(PKCS#10)请求中包含其他信息的标准方法是添加Attributes。根据PKCS#10标准:

  

包含一组属性的意图有两个:提供   有关给定实体的其他信息,或“质询密码”   该实体以后可能要求撤销证书;并   提供包含在X.509证书中的属性。一个   PKCS#9中给出了非详尽的属性列表

属性是 OID ,其含义取决于OID

实际上PKCS#9定义了3个属性:

  • 挑战密码
  • 扩展请求
  • 扩展证书属性(不推荐使用)

您正在寻找的是扩展请求

  

extensionRequest属性类型可用于携带信息   关于证书扩展,请求者希望包含在   证书。

此代码模板(未经测试)可能会为您提供有关如何包含此属性的一些提示

CertificateExtensions exts = /* build the extensions set you want to include */
/* Wrap the extensions set into a SET OF */
OutputStream out = new ByteArrayOutputStream();
exts.encode(out);
DerValue val = new DerValue(DerValue.tag_SetOf, out.toByteArray());
PKCSAttribute extReq = new PKCSAttribute(new ObjectIdentifier("1.2.840.113549.1.9.14"), val.toByteArray());
PKCSAttributes attrs = new PKCSAttributes(new PKCSAttribute[] { extReq });
CertificationRequestInfo cri = new CertificationRequestInfo(subject, key, attrs);
CertificationRequest csr = new CertificationRequest(cri);

请注意,除非CA明确宣布支持此PKCS#10属性,否则在证书生成期间将忽略该属性。