我需要在 CSR 中添加额外的字段,如 keyusage、regestrationID 等。我使用的是 java IBM-sdk60。我已经浏览了 x500 名称 API,但找不到任何解决方案。对 API 的帮助将不胜感激。提前致谢
问问题
5099 次
1 回答
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 属性,否则它将在证书生成期间被忽略。
于 2011-08-12T10:22:06.663 回答