He escrito mi propio código con openssl para crear certificados. Para verificar este código, intenté reconstruir un certificado autofirmado generado por la línea de comando de openssl ...
openssl req -x509 -days 365 -new -out test.pem -key privateKey.pem -config ./caconfig.cnf
... con mi código, incluyendo fecha de inicio, fecha de finalización, serie, etc.
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;
Lamentablemente, la firma no es la misma, aunque todos los demás datos parecen ser los mismos. revisado por
openssl x509 -text -noout -in test.pem
Mi código se basa en esto: enlace
Entonces, me pregunto si olvidé algo para la creación de mi certificado. ¿Cómo se calcula la firma?