diff options
author | tedu <> | 2017-01-02 22:03:56 +0000 |
---|---|---|
committer | tedu <> | 2017-01-02 22:03:56 +0000 |
commit | 5652b8a711562263678662d609ce7925015bce4d (patch) | |
tree | 0f4a229042d1cc1d44fcb121b1fbac991f49be7b /src/lib | |
parent | b925ef0f1039e465222b02e6d36a41504fab2065 (diff) | |
download | openbsd-5652b8a711562263678662d609ce7925015bce4d.tar.gz openbsd-5652b8a711562263678662d609ce7925015bce4d.tar.bz2 openbsd-5652b8a711562263678662d609ce7925015bce4d.zip |
fix cert verify. a cert with an alt chain may verify but leave an error
in the context. don't look for errors in case of success.
fixes spurious verify errors.
guilty change tracked and fix tested by sthen
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libtls/tls.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index 6937afe3b8..53a8506622 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.c,v 1.53 2016/12/26 16:20:58 jsing Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.54 2017/01/02 22:03:56 tedu Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -369,19 +369,19 @@ static int | |||
369 | tls_ssl_cert_verify_cb(X509_STORE_CTX *x509_ctx, void *arg) | 369 | tls_ssl_cert_verify_cb(X509_STORE_CTX *x509_ctx, void *arg) |
370 | { | 370 | { |
371 | struct tls *ctx = arg; | 371 | struct tls *ctx = arg; |
372 | int x509_err; | 372 | int x509_err, rv; |
373 | 373 | ||
374 | if (ctx->config->verify_cert == 0) | 374 | if (ctx->config->verify_cert == 0) |
375 | return (1); | 375 | return (1); |
376 | 376 | ||
377 | if ((X509_verify_cert(x509_ctx)) < 0) { | 377 | if ((rv = X509_verify_cert(x509_ctx)) < 0) { |
378 | tls_set_errorx(ctx, "X509 verify cert failed"); | 378 | tls_set_errorx(ctx, "X509 verify cert failed"); |
379 | return (0); | 379 | return (0); |
380 | } | 380 | } |
381 | if (rv == 1) | ||
382 | return 1; | ||
381 | 383 | ||
382 | x509_err = X509_STORE_CTX_get_error(x509_ctx); | 384 | x509_err = X509_STORE_CTX_get_error(x509_ctx); |
383 | if (x509_err == X509_V_OK) | ||
384 | return (1); | ||
385 | 385 | ||
386 | tls_set_errorx(ctx, "certificate verification failed: %s", | 386 | tls_set_errorx(ctx, "certificate verification failed: %s", |
387 | X509_verify_cert_error_string(x509_err)); | 387 | X509_verify_cert_error_string(x509_err)); |