Sono qui solo per pubblicare la mia risposta come l'ho trovata con i commenti sopra.
Non avevo una catena di certificati, quindi nel lavoro che sto facendo ho solo un certificato generato da me in modo programmatico. Volevo verificarne la validità, quindi ho creato la seguente funzione, che controlla il certificato in se stesso in altri per verificarne la validità.
void check_certificate_validaty(X509* certificate)
{
int status;
X509_STORE_CTX *ctx;
ctx = X509_STORE_CTX_new();
X509_STORE *store = X509_STORE_new();
X509_STORE_add_cert(store, certificate);
X509_STORE_CTX_init(ctx, store, certificate, NULL);
status = X509_verify_cert(ctx);
if(status == 1)
{
printf("Certificate verified ok\n");
}else
{
printf("%s\n", X509_verify_cert_error_string(ctx->error));
}
}
Spero che questo aiuti qualcuno :)
Si può considerare restringendo la piattaforma * * su cui si sta tentare di farlo, anche se con questo potrebbe essere troppo nebuloso per questo forum di domande e risposte. – WhozCraig
Il nome della funzione è fuorviante - non verifica completamente la validità del certificato, devi anche controllare se i nomi host corrispondono, non dimenticarti di farlo. C'è una funzione per esso dal momento che OpenSSL 1.0.2: https://www.openssl.org/docs/manmaster/crypto/X509_check_email.html –