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

Updatde from stable branch.

上级 cec2af75
...@@ -727,7 +727,11 @@ ...@@ -727,7 +727,11 @@
*) Change 'Configure' script to enable Camellia by default. *) Change 'Configure' script to enable Camellia by default.
[NTT] [NTT]
Changes between 0.9.8i and 0.9.8j [xx XXX xxxx] Changes between 0.9.8i and 0.9.8j [07 Jan 2009]
*) Properly check EVP_VerifyFinal() and similar return values
(CVE-2008-5077).
[Ben Laurie, Bodo Moeller, Google Security Team]
*) Allow the CHIL engine to be loaded, whether the application is *) Allow the CHIL engine to be loaded, whether the application is
multithreaded or not. (This does not release the developer from the multithreaded or not. (This does not release the developer from the
......
...@@ -1994,7 +1994,7 @@ int MAIN(int argc, char **argv) ...@@ -1994,7 +1994,7 @@ int MAIN(int argc, char **argv)
{ {
ret=RSA_verify(NID_md5_sha1, buf,36, buf2, ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
rsa_num, rsa_key[j]); rsa_num, rsa_key[j]);
if (ret == 0) if (ret <= 0)
{ {
BIO_printf(bio_err, BIO_printf(bio_err,
"RSA verify failure\n"); "RSA verify failure\n");
......
...@@ -285,7 +285,7 @@ bad: ...@@ -285,7 +285,7 @@ bad:
pkey = NETSCAPE_SPKI_get_pubkey(spki); pkey = NETSCAPE_SPKI_get_pubkey(spki);
if(verify) { if(verify) {
i = NETSCAPE_SPKI_verify(spki, pkey); i = NETSCAPE_SPKI_verify(spki, pkey);
if(i) BIO_printf(bio_err, "Signature OK\n"); if (i > 0) BIO_printf(bio_err, "Signature OK\n");
else { else {
BIO_printf(bio_err, "Signature Failure\n"); BIO_printf(bio_err, "Signature Failure\n");
ERR_print_errors(bio_err); ERR_print_errors(bio_err);
......
...@@ -266,7 +266,7 @@ static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X ...@@ -266,7 +266,7 @@ static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X
ret=0; ret=0;
end: end:
if (i) if (i > 0)
{ {
fprintf(stdout,"OK\n"); fprintf(stdout,"OK\n");
ret=1; ret=1;
...@@ -367,4 +367,3 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx) ...@@ -367,4 +367,3 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
ERR_clear_error(); ERR_clear_error();
return(ok); return(ok);
} }
...@@ -1130,7 +1130,7 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, ...@@ -1130,7 +1130,7 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
/* NOTE: this certificate can/should be self signed, unless it was /* NOTE: this certificate can/should be self signed, unless it was
* a certificate request in which case it is not. */ * a certificate request in which case it is not. */
X509_STORE_CTX_set_cert(&xsc,x); X509_STORE_CTX_set_cert(&xsc,x);
if (!reqfile && !X509_verify_cert(&xsc)) if (!reqfile && X509_verify_cert(&xsc) <= 0)
goto end; goto end;
if (!X509_check_private_key(xca,pkey)) if (!X509_check_private_key(xca,pkey))
......
lib lib
Makefile.save Makefile.save
cmll-*.s
...@@ -1046,7 +1046,7 @@ int ssl2_set_certificate(SSL *s, int type, int len, const unsigned char *data) ...@@ -1046,7 +1046,7 @@ int ssl2_set_certificate(SSL *s, int type, int len, const unsigned char *data)
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if ((s->verify_mode != SSL_VERIFY_NONE) && (!i)) if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0))
{ {
SSLerr(SSL_F_SSL2_SET_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED); SSLerr(SSL_F_SSL2_SET_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED);
goto err; goto err;
......
...@@ -1054,7 +1054,7 @@ static int request_certificate(SSL *s) ...@@ -1054,7 +1054,7 @@ static int request_certificate(SSL *s)
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if (i) /* we like the packet, now check the chksum */ if (i > 0) /* we like the packet, now check the chksum */
{ {
EVP_MD_CTX ctx; EVP_MD_CTX ctx;
EVP_PKEY *pkey=NULL; EVP_PKEY *pkey=NULL;
...@@ -1083,7 +1083,7 @@ static int request_certificate(SSL *s) ...@@ -1083,7 +1083,7 @@ static int request_certificate(SSL *s)
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
EVP_MD_CTX_cleanup(&ctx); EVP_MD_CTX_cleanup(&ctx);
if (i) if (i > 0)
{ {
if (s->session->peer != NULL) if (s->session->peer != NULL)
X509_free(s->session->peer); X509_free(s->session->peer);
......
...@@ -1018,7 +1018,7 @@ int ssl3_get_server_certificate(SSL *s) ...@@ -1018,7 +1018,7 @@ int ssl3_get_server_certificate(SSL *s)
} }
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if ((s->verify_mode != SSL_VERIFY_NONE) && (!i) if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0)
#ifndef OPENSSL_NO_KRB5 #ifndef OPENSSL_NO_KRB5
&& !((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5) && && !((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5) &&
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5)) (s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5))
...@@ -1554,7 +1554,7 @@ int ssl3_get_key_exchange(SSL *s) ...@@ -1554,7 +1554,7 @@ int ssl3_get_key_exchange(SSL *s)
EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,param,param_len); EVP_VerifyUpdate(&md_ctx,param,param_len);
if (!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)
{ {
/* bad signature */ /* bad signature */
al=SSL_AD_DECRYPT_ERROR; al=SSL_AD_DECRYPT_ERROR;
...@@ -1572,7 +1572,7 @@ int ssl3_get_key_exchange(SSL *s) ...@@ -1572,7 +1572,7 @@ int ssl3_get_key_exchange(SSL *s)
EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE); EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
EVP_VerifyUpdate(&md_ctx,param,param_len); EVP_VerifyUpdate(&md_ctx,param,param_len);
if (!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)
{ {
/* bad signature */ /* bad signature */
al=SSL_AD_DECRYPT_ERROR; al=SSL_AD_DECRYPT_ERROR;
......
...@@ -2844,7 +2844,7 @@ int ssl3_get_client_certificate(SSL *s) ...@@ -2844,7 +2844,7 @@ int ssl3_get_client_certificate(SSL *s)
else else
{ {
i=ssl_verify_cert_chain(s,sk); i=ssl_verify_cert_chain(s,sk);
if (!i) if (i <= 0)
{ {
al=ssl_verify_alarm_type(s->verify_result); al=ssl_verify_alarm_type(s->verify_result);
SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATE_RETURNED); SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_NO_CERTIFICATE_RETURNED);
......
...@@ -2177,7 +2177,7 @@ static int MS_CALLBACK app_verify_callback(X509_STORE_CTX *ctx, void *arg) ...@@ -2177,7 +2177,7 @@ static int MS_CALLBACK app_verify_callback(X509_STORE_CTX *ctx, void *arg)
if (cb_arg->proxy_auth) if (cb_arg->proxy_auth)
{ {
if (ok) if (ok > 0)
{ {
const char *cond_end = NULL; const char *cond_end = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册