C 如何从X509修改扩展?

C 如何从X509修改扩展?,c,openssl,x509,C,Openssl,X509,我正在创建一个api,用于修改C中的X509证书,我想添加一种修改扩展的方法。例如,将另一个DNS条目添加到subjectNameAlt,使其成为DNS:example.com、DNS:example2.com,而不仅仅是DNS:example.com。删除和重新添加是不好的,因为我必须重新分析扩展(这很困难),我宁愿只添加一条信息。如何通过OpenSSL API实现这一点 我试图简单地重用添加代码: ex = X509V3_EXT_conf_nid(NULL, &ctx, NID_subjec

我正在创建一个api,用于修改C中的
X509
证书,我想添加一种修改扩展的方法。例如,将另一个DNS条目添加到
subjectNameAlt
,使其成为
DNS:example.com、DNS:example2.com
,而不仅仅是
DNS:example.com
。删除和重新添加是不好的,因为我必须重新分析扩展(这很困难),我宁愿只添加一条信息。如何通过OpenSSL API实现这一点

我试图简单地重用添加代码:

ex = X509V3_EXT_conf_nid(NULL, &ctx, NID_subject_alt_name, "DNS:new.dns.example");
if (!ex)
    return;
X509_add_ext(cert,ex,-1);
X509_EXTENSION_free(ex);
但是在运行该扩展之后,根本找不到该扩展(即使我尝试添加另一个新扩展)。

请查看

  demos/x509/mkcert.c
  demos/x509/selfsign.c
  demos/x509/mkreq.c

在您的openssl发行版中。我怀疑你没有建立你的背景;或者你是在假设,当你说“根本找不到”时,一些i2d/etc在幕后被调用。请注意,X509_sign()及其同类产品确实产生了大量这种情况。如果您没有调用任何内容,那么不要期望创建任何内容。

这与您10分钟前的请求非常相似。考虑编辑原件而不是问一个新的问题。@ LuleRoRog它们在OpenSSL API中是相似的,但涉及不同的方法,并且有不同的目标。我只是说,它看起来像是之前Q的修订版。你可能想让它们看起来更不一样,以避免其他人试图以重复的方式关闭。