2010-05-21 22 views
5

Bu bölümleri sertifikaya nasıl ekleyebilirim (C++ kullanarak el ile yapıyorum). OpenSSL sertifikası, anahtar tanımlayıcılarından yoksundur

X509v3 Subject Key Identifier: 
     A4:F7:38:55:8D:35:1E:1D:4D:66:55:54:A5:BE:80:25:4A:F0:68:D0 
    X509v3 Authority Key Identifier: 
     keyid:A4:F7:38:55:8D:35:1E:1D:4D:66:55:54:A5:BE:80:25:4A:F0:68:D0 

Curently benim kod bu tuşları haricinde sertificate iyi kurar ..:/

static X509 * GenerateSigningCertificate(EVP_PKEY* pKey) 
{ 
    X509 *x; 
    x = X509_new(); //create x509 certificate 

    X509_set_version(x, NID_X509); 
    ASN1_INTEGER_set(X509_get_serialNumber(x), 0x00000000); //set serial number 
    X509_gmtime_adj(X509_get_notBefore(x), 0); 
    X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*365); //1 year 
    X509_set_pubkey(x, pKey); //set pub key from just generated rsa 

    X509_NAME *name; 

    name = X509_get_subject_name(x); 

    NAME_StringField(name, "C", "LV"); 
    NAME_StringField(name, "CN", "Point"); //common name 
    NAME_StringField(name, "O", "Point"); //organization 

    X509_set_subject_name(x, name); //save name fields to certificate 
    X509_set_issuer_name(x, name); //save name fields to certificate 

    X509_EXTENSION *ex; 
    ex = X509V3_EXT_conf_nid(NULL, NULL, NID_netscape_cert_type, "server"); 
    X509_add_ext(x,ex,-1); 
    X509_EXTENSION_free(ex); 

    ex = X509V3_EXT_conf_nid(NULL, NULL, NID_netscape_comment, "example comment extension"); 
    X509_add_ext(x, ex, -1); 
    X509_EXTENSION_free(ex); 

    ex = X509V3_EXT_conf_nid(NULL, NULL, NID_netscape_ssl_server_name, "www.lol.lv"); 

    X509_add_ext(x, ex, -1); 
    X509_EXTENSION_free(ex); 

    ex = X509V3_EXT_conf_nid(NULL, NULL, NID_basic_constraints, "critical,CA:TRUE"); 
    X509_add_ext(x, ex, -1); 
    X509_EXTENSION_free(ex); 

    X509_sign(x, pKey, EVP_sha1()); //sign x509 certificate 
    return x; 
} 
+0

şu satırları ekleyin: herkes bu bakıyor örnek kod, bu çağrı "X509_set_version (x, NID_X509);" yanlış "X509_set_version (x, 2);" – Wheezil

cevap

9

Bulunan çözüm - Bilginize kodu

ex = X509V3_EXT_conf_nid(NULL, NULL, NID_subject_key_identifier, "hash"); 
X509_add_ext(x, ex, -1); 
X509_EXTENSION_free(ex); 

ex = X509V3_EXT_conf_nid(NULL, NULL, NID_authority_key_identifier, "keyid:always"); 
X509_add_ext(x, ex, -1); 
X509_EXTENSION_free(ex); 
+0

Sadece tamlık için: bu işlev OpenSSL API'sinin bir parçası değildir, bir [OpenSSL örneği] 'den gelir (https://www.codeblog.org/viewsrc/openssl-fips-1.1.1/demos/x509/mkcert .c). – ereOn

+0

@ereOn bağımlılık olmadan kodu yeniden yazdı :) – chacham15

+0

Bu garip. Düzgün çalışması için benzer kod ('.../demos/mkcert.c') alamadım. SKI eklemeye çalışırken "0x22073072" ("X509 V3 rutines: S2I_SKEY_ID: no public key") hatasıyla 'X509V3_EXT_conf_nid' adlı dizinden NULL 'X509_EXTENSION 'aldım. Ve evet, ortak anahtar daha önce "X509_set_pubkey" ile ayarlandı. – jww

İlgili konular