创建具有自定义扩展CSR问题的x509v3证书

时间:2018-04-12 14:43:12

标签: ssl-certificate x509certificate x509 digital-certificate scep

我尝试使用openssl API&#39>向CSR添加自定义扩展程序。

struct stack_st_X509_EXTENSION *exts = NULL;
X509_EXTENSION *ex;
exts = sk_X509_EXTENSION_new_null();
ASN1_OCTET_STRING *os = ASN1_OCTET_STRING_new();
nid = OBJ_create("2.5.29.41", "CompanyName", "Company Name");
ASN1_OCTET_STRING_set(os,"ABC Corp",8);   
ex = X509_EXTENSION_create_by_NID( NULL, nid, 0, os );
sk_X509_EXTENSION_push(exts, ex);
X509_REQ_add_extensions(x, exts);

我要求提供证书,我通过SCEP请求接收证书。 (Windows 2008服务器) 稍后当我解析证书时,我看到显示的扩展名仍然是OID而不是扩展名"公司名称"

X509v3 extensions:  
2.5.29.41: 
        ABC Corp 

我是否以正确的方式添加了扩展程序?如何在证书中获取扩展名?

请帮助朋友..

2 个答案:

答案 0 :(得分:1)

这是预期的行为。 OID = 2.5.29.41的扩展名对Windows不标准,因此您只能看到OID值。只要您的客户端应用程序了解此扩展并且可以解析其内容,您就不应该关心这个事实。

尽管如此,我怀疑你错误地使用了这个扩展程序。根据我的发现,OID = 2.5.29.41代表basicAttConstraints证书扩展。参考:http://oidref.com/2.5.29.41。我在Java中找到了示例实现:Class BasicAttConstraint。该值应为整数,其含义类似于Basic Constraints证书扩展的PathLength属性。但是你在那里设置一个字符串。这没有任何意义。

答案 1 :(得分:0)

扩展程序的名称未保存在证书中。只有它的OID。

证书查看者有一个已知扩展名及其名称的简短表格。在表中显示扩展名时,使用名称,否则只显示OID。在这种情况下,您使用的查看器没有该扩展名的存储名称。

[Xx]调用将OID添加到OpenSSL的命名OID内部表中。保存证书时不使用此名称。