如何向具有自定义DN格式的实体颁发证书?

时间:2012-01-05 10:17:29

标签: certificate x509

在我们的应用程序中,我们为平台和用户等内部实体生成证书。我们的内部实体由自定义DN标识:

  • 平台DN: p = platformName
  • 用户DN: cn = userName,p = platformName

我们尝试使用openssl,keytool,javax.security(BouncyCastle)的实现等流行工具为平台或用户生成X.509证书,例如:

keytool -genkey -dname "p=platformName" -alias platformName

但是,这些工具不接受/识别关键字“P”或要求证书主题DN中的某些关键字,如“CN”。

如何向具有自定义DN格式的实体颁发证书?

注意:我们不需要包含标准关键字(CN,OU等)的DN,因为所有证书都将供我们产品内部使用(不会被第三方验证)或包含在证书链中。)

2 个答案:

答案 0 :(得分:4)

我只能说openssl,因为我不熟悉其他工具。

来自openssl docs

  

ASN1对象配置模块

     

此模块的名称为oid_section。此变量的值   指向包含OID名称值对的部分:名称为   OID短名称和长名称,值是数字形式的   OID。虽然一些openssl实用程序子命令已经有了   他们自己的ASN1 OBJECT部分​​功能并非都是如此。通过使用   ASN1 OBJECT配置模块所有openssl实用程序子命令   可以看到新对象以及任何兼容的应用程序。

所以你要做的就是在/etc/openssl.conf或者文件适用于你的平台的任何地方创建这些oid,然后openssl不会给你Subject attribute p has no known NID, skipped消息,我怀疑你得到了什么现在

答案 1 :(得分:4)

  

我们不需要包含标准关键字(CN,OU等)的DN

     

如何向具有自定义DN格式的实体颁发证书?

显示的属性或字段是演示文稿级别详细信息。本身没有可分辨的DN字段 。用于形成DN的字段是其他属性的混搭,可以任意选择。常见的是COOUCN等。

COOUCN等属性或字段具有与之关联的众所周知的OID。您可以使用其他可由工具识别的OID。例如,ITU's X.520列出了数百个。还有其他标准也宣称它们。例如,电子邮件地址属性来自PKCS 9,其OID为1.2.840.113549.1.9.1。

正如Burhan Khalid所说,你甚至可以通过弥补OID(一些放弃手)来添加你自己的名字/价值对。但是,其他演示工具不知道如何显示它们。也就是说,他们不会知道这个友好的名字"。

因为其他工具无法识别您的平台OID(或者#34; p = ..."),这就是您获取 ...这些工具的原因不接受/识别关键字" P" 。这些工具不知道如何处理您的自定义属性。