10

我正在创建一个将由我的服务器处理的 CSR。它需要设置 subjectNameAlt 以便服务器可以处理它。我进行了广泛的搜索,只发现如何使用普通的 X509 证书而不是 X509_REQ。我怎样才能做到这一点(使用 C 和 OpenSSL。即我需要相当于X509_get_ext_d2ibut for X509_REQ)?

4

1 回答 1

14

以编程方式

查看demos/x509/mkreq.cOpenSSL 附带的文件。它会创建一个请求并添加一个电子邮件地址作为替代名称。剥离它执行以下操作:

exts = sk_X509_EXTENSION_new_null();
add_ext(exts, NID_subject_alt_name, "email:steve@openssl.org");
X509_REQ_add_extensions(x, exts);
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);

是这样实现的add_ext

int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value) {
  X509_EXTENSION *ex;
  ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value);
  if (!ex)
    return 0;
  sk_X509_EXTENSION_push(sk, ex);
  return 1;
}

从命令行

尽管 OP 请求了 API,但我将这部分留给其他人。

https://wiki.cacert.org/FAQ/subjectAltName建议将openssl.cnf文件复制到临时openssl-san.cnf文件,然后像这样编辑:

[req]
req_extensions = v3_req

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = host1.yourdomain.tld
DNS.2 = host2.yourdomain.tld
于 2013-04-12T08:15:20.607 回答