2013-04-12 14 views
7

Sto creando un CSR che verrà elaborato dal mio server. È necessario impostare subjectNameAlt in modo che il server possa elaborarlo. Ho cercato in lungo e in largo, e ho trovato solo come farlo con i normali certificati X509, non con X509_REQ. Come posso fare questo (con C e OpenSSL I.e. Ho bisogno dell'equivalente di X509_get_ext_d2i ma per X509_REQ)?Come si aggiunge un'estensione subjectNameAlt a X509_REQ?

risposta

10

programmazione

Date un'occhiata al file di demos/x509/mkreq.c che viene fornito con OpenSSL. Crea una richiesta e aggiunge un indirizzo email come nome alternativo. Stripped Down esegue le seguenti operazioni:

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

Il add_ext è implementato in questo modo:

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

Dalla riga di comando

lascio questa sezione in vigore per gli altri, anche se OP ha chiesto un API.

https://wiki.cacert.org/FAQ/subjectAltName consigliati a copiare il file openssl.cnf in un file temporaneo openssl-san.cnf e quindi modificare che in questo modo:

[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

io voglio fare questo via c, non attraverso la shell o file system. – chacham15

+0

Fantastico! L'ho cercato per ore! – chacham15

+0

Come possiamo aggiungere un'estensione multivalore come in [alt_names], usando c a livello di programmazione? – karim

Problemi correlati