2010-05-21 5 views
5

Wie füge ich diese Abschnitte zum Zertifikat hinzu (ich baue es manuell mit C++).OpenSSL-Zertifikat fehlt Schlüsselbezeichner

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 baut mein Code sertificate gut, mit Ausnahme der Tasten ..:/

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

FYI diese Zeilen Code hinzufügen: Jeder Blick auf diese als Beispielcode, dieser Aufruf "X509_set_version (x, NID_X509);" ist falsch sollte es sein "X509_set_version (x, 2);" – Wheezil

Antwort

9

Gefunden Lösung -

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

Nur der Vollständigkeit halber: Diese Funktion ist nicht Teil der OpenSSL-API, sie stammt aus einem [OpenSSL-Beispiel] (https://www.codeblog.org/viewsrc/openssl-fips-1.1.1/demos/x509/mkcert .c). – ereOn

+0

@ereOn schrieb den Code ohne die Abhängigkeit um :) – chacham15

+0

Das ist seltsam. Ich konnte keinen ähnlichen Code ('.../demos/mkcert.c') bekommen, um richtig zu funktionieren. Ich habe eine NULL 'X509_EXTENSION' zurück von' X509V3_EXT_conf_nid' mit dem Fehler "0x22073072" ("X509 V3-Routinen: S2I_SKEY_ID: kein öffentlicher Schlüssel") beim Versuch, den SKI hinzuzufügen. Und ja, der öffentliche Schlüssel wurde früher über 'X509_set_pubkey' gesetzt. – jww