c - 如何修改 X509 的扩展名?

标签 c openssl x509

我正在创建一个用于在 C 中修改 X509 证书的 api,我想添加一种修改扩展的方法。例如,向 subjectNameAlt 添加另一个 DNS 条目,使其成为 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() 及其同类确实创建了很多这样的东西。如果您没有调用任何东西 - 那么不要期望创建任何这些。

关于c - 如何修改 X509 的扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978950/

相关文章:

http - Golang,发送OCSP请求返回

ios - 在 iOS 上使用 Openssl 的 CMS 加密问题

c - 生成随机无序的混合物

bash - 为什么即使出现错误 OpenSSL 也会返回 0?

由于 "<urlopen error [SSL: NO_CIPHERS_AVAILABLE] no ciphers available (_ssl.c:661)>",Python HTTPS 下载失败

c++ - 使用 STACK_OF(X509)

c - Pthread 条件语句

java - Java和C之间的通信协议(protocol)

c - 从 Dcache (L1) 读取值与全局变量

c - C语言使用公钥文件加密数据