2013-04-12 5 views
7

Ich erstelle eine CSR, die von meinem Server verarbeitet wird. Es muss das SubjectNameAlt so festgelegt werden, dass der Server es verarbeiten kann. Ich habe weit und breit gesucht und habe nur gefunden, wie man es mit normalen X509-Certs macht, nicht X509_REQ. Wie kann ich das tun (mit C und OpenSSL. Ie. Ich brauche das Äquivalent von aber für X509_REQ)?Wie fügen Sie eine SubjectNameAlt-Erweiterung zu X509_REQ hinzu?

Antwort

10

Programmatically

Werfen Sie einen Blick auf die demos/x509/mkreq.c-Datei, die mit OpenSSL kommt. Es erstellt eine Anfrage und fügt eine E-Mail-Adresse als alternativen Namen hinzu. Abgespeckte geschieht Folgendes:

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

Die add_ext wie dies umgesetzt wird:

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

in der Befehlszeile

ich diesen Abschnitt an Ort und Stelle lassen für andere, obwohl OP eine angeforderte API.

https://wiki.cacert.org/FAQ/subjectAltName berät die openssl.cnf Datei in einen temporären openssl-san.cnf Datei zu kopieren und dann das bearbeiten wie folgt aus:

[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 
+2

ich dies über c tun wollen, nicht durch die Schale oder Dateisystem. – chacham15

+0

Super! Ich habe stundenlang danach gesucht! – chacham15

+0

Wie können wir mehrwertige Erweiterungen wie in [alt_names] hinzufügen, indem wir programmgesteuert c verwenden? – karim

Verwandte Themen