7
我正在創建一個將由我的服務器處理的CSR。它需要設置subjectNameAlt,以便服務器可以處理它。我已經搜索了很多,並且只發現瞭如何使用普通的X509證書,而不是X509_REQ。我如何做到這一點(使用C和OpenSSL,即我需要X509_get_ext_d2i
的等價物,但X509_REQ
)?如何爲X509_REQ添加subjectNameAlt擴展名?
我正在創建一個將由我的服務器處理的CSR。它需要設置subjectNameAlt,以便服務器可以處理它。我已經搜索了很多,並且只發現瞭如何使用普通的X509證書,而不是X509_REQ。我如何做到這一點(使用C和OpenSSL,即我需要X509_get_ext_d2i
的等價物,但X509_REQ
)?如何爲X509_REQ添加subjectNameAlt擴展名?
看一看的demos/x509/mkreq.c
文件附帶的OpenSSL。它創建一個請求並添加一個電子郵件地址作爲替代名稱。剝離下來將執行以下操作:
exts = sk_X509_EXTENSION_new_null();
add_ext(exts, NID_subject_alt_name, "email:[email protected]");
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
我想通過C要做到這一點,而不是通過殼或文件系統。 – chacham15
太棒了!我一直在尋找這個好幾個小時! – chacham15
我們如何通過編程使用c來添加像[alt_names]一樣的多值擴展? – karim