Ho scritto il mio codice con openssl per creare certificati. Per verificare questo codice, ho provato a ricostruire una linea di comando openssl generata come certificato autofirmato ...
openssl req -x509 -days 365 -new -out test.pem -key privateKey.pem -config ./caconfig.cnf
... con il mio codice, incluso startdate, enddate, serial, ecc.
X509* tempX509=X509_new();
X509_set_version(tempX509,0); /* set to X509 version 1 */
ASN1_INTEGER_set(X509_get_serialNumber(tempX509), serialTmp);
//X509_gmtime_adj(X509_get_notBefore(tempX509), 0);
//X509_gmtime_adj(X509_get_notAfter(tempX509), 60*60*24*daysTmp);
ASN1_TIME_set_string( X509_get_notBefore(tempX509), "YYYYMMDDHHMMSSZ");
ASN1_TIME_set_string( X509_get_notAfter(tempX509), "YYYYMMDDHHMMSSZ");
X509_set_pubkey(tempX509,pubkeyTemp);
X509_NAME *x509_name = NULL;
x509_name = X509_get_subject_name(tempX509);
if( strlen(countryTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "C", MBSTRING_ASC, (TDF_UCHAR*)countryTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if( strlen(stateTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "ST", MBSTRING_ASC, (TDF_UCHAR*)stateTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if( strlen(localityTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "L", MBSTRING_ASC, (TDF_UCHAR*)localityTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if( strlen(organizationTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "O", MBSTRING_ASC, (TDF_UCHAR*)organizationTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if( strlen(organizationUnitTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "OU", MBSTRING_ASC, (TDF_UCHAR*)organizationUnitTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if( strlen(commonNameTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "CN", MBSTRING_ASC, (TDF_UCHAR*)commonNameTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if( strlen(emailAddressTmp) )
if(!(X509_NAME_add_entry_by_txt(x509_name, "emailAddress", MBSTRING_ASC, (TDF_UCHAR*)emailAddressTmp, -1, -1, 0)))
return K_TDF_STATUS_CERT_ADD_ERROR;
if(!(X509_set_issuer_name(tempX509, x509_name)))
return K_TDF_STATUS_CERT_GEN_ERROR;
if(!X509_sign( tempX509, privkeyTemp, getDigestType(engine)))
return K_TDF_STATUS_CERT_GEN_ERROR;
Sfortunatamente, la firma non è la stessa, anche se tutti gli altri dati sembrano essere gli stessi. controllato da
openssl x509 -text -noout -in test.pem
Il mio codice è basato su questo: link
Quindi, mi chiedo se ho dimenticato qualcosa per la creazione del mio certificato. Come viene calcolata la firma?