0

我正在尝试使用 openssl API 向 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 

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

请朋友帮忙。。

4

2 回答 2

1

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

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

于 2018-04-12T15:14:29.540 回答
0

扩展名不保存在证书中。只有它的 OID。

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

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

于 2018-04-12T15:17:27.690 回答