Nick Lewis via RT wrote:
> The path loop detection in crypto/x509/x509_vfy.c:check_issued() does not
> work correctly for some combinations of ctx->chain, x and issuer. For example
> when the cert x is in the chain at a location other than the top, a path loop
> is incorrectly declared. Also if the cert x is at the top of the chain but it
> is self signed then a path loop is incorrectly declared. In practice the
> latter causes bugs in which trusted self signed certificates are seen as
> untrusted (e.g. some OCSP responses)
>
> It is my understanding that a path loop should only exist if the issuer is
> present in the chain at a lower position to that of the cert x. Please find
> below a patch against SNAP20110815
>
> Best Regards
> Nick
> _________
>
>
> diff --git a/crypto/x509/x509_vfy.c b/crypto/x509/x509_vfy.c
> index 64df4d3..7bbe43b 100755
> --- a/crypto/x509/x509_vfy.c
> +++ b/crypto/x509/x509_vfy.c
> @@ -443,15 +443,18 @@ static int check_issued(X509_STORE_CTX *ctx, X509 *x,
> X509 *issuer)
> {
> int i;
> X509 *ch;
> + int issuer_num = 0;
> + int x_num = 0;
> for (i = 0; i< sk_X509_num(ctx->chain); i++)
> {
> ch = sk_X509_value(ctx->chain, i);
> if (ch == issuer || !X509_cmp(ch, issuer))
> - {
> - ret = X509_V_ERR_PATH_LOOP;
> - break;
> - }
> + issuer_num = issuer_num ? issuer_num : i+1;
> + if (ch == x || !X509_cmp(ch, x))
> + x_num = i+1;
> }
> + if (issuer_num< x_num)
> + ret = X509_V_ERR_PATH_LOOP;
> }
>
The patch above fix some issues with self issued but break other
non-self issued.
Roumen
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [email protected]
Automated List Manager [email protected]