¿Qué entra en el cálculo de la firma del certificado?

1

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?

    
pregunta tobuh 13.04.2016 - 11:17
fuente

0 respuestas

Lea otras preguntas en las etiquetas