2013-04-12 51 views
1

我正在创建一个API用于修改C中的X509证书,我想添加一种方法来修改扩展。例如,将另一个DNS条目添加到subjectNameAlt,以便它将是DNS:example.com,DNS:example2.com而不仅仅是DNS:example.com。删除和重新添加不好的原因是因为我必须重新分析扩展(这很困难),我宁愿添加一条信息。我将如何通过OpenSSL API执行此操作?如何修改X509的扩展?

我想简单地重用添加代码:

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); 

但运行后,在所有发现的(即使我尝试添加其他新的)分机心不是。

+0

这与您提前10分钟询问的[此问题]非常相似(http://stackoverflow.com/questions/15978758/how-do-you-remove-an-extension-from-an-x509)。考虑编辑原文,而不是问一个新问题。 –

+0

@luserdroog他们是相似的,但在OpenSSL API中涉及不同的方法,并有不同的目标 – chacham15

+0

好的。我只是说*它看起来像*前一个Q的修订版本。您可能希望使它们*更加不同的外观*以避免其他人尝试关闭作为​​副本。 –

回答

0

有你的OpenSSL分布看

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

。我怀疑你没有设置你的背景;或者你正在做一个假设,因为当你说'根本找不到'时,某些i2d/etc会在场景后面被调用。请注意,X509_sign()和他们的流行确实创造了很多。如果你不打电话 - 那么不要期望任何人被创造。