Skip to content

Commit

Permalink
openssl: fix pubkey/signature algorithm detection in certinfo
Browse files Browse the repository at this point in the history
Certinfo gives the same result for all OpenSSL versions.
Also made printing RSA pubkeys consistent with older versions.

Reported-by: Michael Wallner
Fixes curl#3706
Closes curl#4030
  • Loading branch information
ngg authored and bagder committed Jun 18, 2019
1 parent 755083d commit 6c2b7d4
Showing 1 changed file with 17 additions and 10 deletions.
27 changes: 17 additions & 10 deletions lib/vtls/openssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3085,18 +3085,25 @@ static CURLcode get_cert_chain(struct connectdata *conn,

#if defined(HAVE_X509_GET0_SIGNATURE) && defined(HAVE_X509_GET0_EXTENSIONS)
{
const X509_ALGOR *palg = NULL;
ASN1_STRING *a = ASN1_STRING_new();
if(a) {
X509_get0_signature(&psig, &palg, x);
X509_signature_print(mem, ARG2_X509_signature_print palg, a);
ASN1_STRING_free(a);

if(palg) {
i2a_ASN1_OBJECT(mem, palg->algorithm);
const X509_ALGOR *sigalg = NULL;
X509_PUBKEY *xpubkey = NULL;
ASN1_OBJECT *pubkeyoid = NULL;

X509_get0_signature(&psig, &sigalg, x);
if(sigalg) {
i2a_ASN1_OBJECT(mem, sigalg->algorithm);
push_certinfo("Signature Algorithm", i);
}

xpubkey = X509_get_X509_PUBKEY(x);
if(xpubkey) {
X509_PUBKEY_get0_param(&pubkeyoid, NULL, NULL, NULL, xpubkey);
if(pubkeyoid) {
i2a_ASN1_OBJECT(mem, pubkeyoid);
push_certinfo("Public Key Algorithm", i);
}
}

X509V3_ext(data, i, X509_get0_extensions(x));
}
#else
Expand Down Expand Up @@ -3148,7 +3155,7 @@ static CURLcode get_cert_chain(struct connectdata *conn,
const BIGNUM *e;

RSA_get0_key(rsa, &n, &e, NULL);
BN_print(mem, n);
BIO_printf(mem, "%d", BN_num_bits(n));
push_certinfo("RSA Public Key", i);
print_pubkey_BN(rsa, n, i);
print_pubkey_BN(rsa, e, i);
Expand Down

0 comments on commit 6c2b7d4

Please sign in to comment.