提交 72245f34 编写于 作者: D Dr. Stephen Henson

Check for missing DSA parameters.

If DSA parameters are absent return -1 (for unknown) in DSA_security_bits.

If parameters are absent when a certificate is set in an SSL/SSL_CTX
structure this will reject the certificate by default. This will cause DSA
certificates which omit parameters to be rejected but that is never (?)
done in practice.

Thanks to Brian 'geeknik' Carpenter for reporting this issue.
Reviewed-by: NEmilia Käsper <emilia@openssl.org>
上级 923ffa97
......@@ -246,7 +246,9 @@ void *DSA_get_ex_data(DSA *d, int idx)
int DSA_security_bits(const DSA *d)
{
return BN_security_bits(BN_num_bits(d->p), BN_num_bits(d->q));
if (d->p && d->q)
return BN_security_bits(BN_num_bits(d->p), BN_num_bits(d->q));
return -1;
}
#ifndef OPENSSL_NO_DH
......
......@@ -4253,13 +4253,18 @@ DH *ssl_get_auto_dh(SSL *s)
static int ssl_security_cert_key(SSL *s, SSL_CTX *ctx, X509 *x, int op)
{
int secbits;
int secbits = -1;
EVP_PKEY *pkey = X509_get_pubkey(x);
if (pkey) {
/*
* If no parameters this will return -1 and fail using the default
* security callback for any non-zero security level. This will
* reject keys which omit parameters but this only affects DSA and
* omission of parameters is never (?) done in practice.
*/
secbits = EVP_PKEY_security_bits(pkey);
EVP_PKEY_free(pkey);
} else
secbits = -1;
}
if (s)
return ssl_security(s, op, secbits, 0, x);
else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册