gnutls-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: The _gnutls_x509_verify_certificate fix


From: Simon Josefsson
Subject: Re: The _gnutls_x509_verify_certificate fix
Date: Tue, 11 Nov 2008 16:05:42 +0100
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/22.2 (gnu/linux)

Tomas Mraz <address@hidden> writes:

> On Mon, 2008-11-10 at 21:04 +0100, Nikos Mavrogiannopoulos wrote:
>> On Mon, Nov 10, 2008 at 2:47 PM, Tomas Mraz <address@hidden> wrote:
>> > Hello,
>> > given the recent fix in the _gnutls_x509_verify_certificate I have been
>> > looking at the function. I see there are currently some limitations in
>> > it. For example it now doesn't allow verification of explicitely trusted
>> > self-signed site certificate. Is there some other method how this could
>> > be achieved?
>> You can achieve it by associating an address of a website with the
>> keyid of the given
>> certificate. This is more generic of trusting a self-signed
>> certificate. You can trust any
>> certificate first presented when accessing a website that way (ssh security).
>
> But the patch should be modified anyway because in case the server
> presents just a self-signed site certificate there will be a dereference
> of the certificate_list[-1].
>
> It is also questionable whether the function should not also check for
> clist_size of 0 before calling _gnutls_verify_certificate2().

Indeed.  This may explain:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505279

/Simon

> -- 
> Tomas Mraz
> No matter how far down the wrong road you've gone, turn back.
>                                               Turkish proverb
> diff -up gnutls-1.4.1/lib/x509/verify.c.chain-verify 
> gnutls-1.4.1/lib/x509/verify.c
> --- gnutls-1.4.1/lib/x509/verify.c.chain-verify       2008-11-11 
> 10:55:19.000000000 +0100
> +++ gnutls-1.4.1/lib/x509/verify.c    2008-11-11 10:58:54.000000000 +0100
> @@ -379,6 +379,17 @@ _gnutls_x509_verify_certificate (const g
>    int i = 0, ret;
>    unsigned int status = 0, output;
>  
> +  /* Check if the last certificate in the path is self signed.
> +   * In that case ignore it (a certificate is trusted only if it
> +   * leads to a trusted party by us, not the server's).
> +   */
> +  if (clist_size > 1 &&
> +      gnutls_x509_crt_check_issuer (certificate_list[clist_size - 1],
> +                                 certificate_list[clist_size - 1]) > 0)
> +    {
> +      clist_size--;
> +    }
> +
>    /* Verify the last certificate in the certificate path
>     * against the trusted CA certificate list.
>     *
> @@ -417,17 +428,6 @@ _gnutls_x509_verify_certificate (const g
>      }
>  #endif
>  
> -  /* Check if the last certificate in the path is self signed.
> -   * In that case ignore it (a certificate is trusted only if it
> -   * leads to a trusted party by us, not the server's).
> -   */
> -  if (gnutls_x509_crt_check_issuer (certificate_list[clist_size - 1],
> -                                 certificate_list[clist_size - 1]) > 0
> -      && clist_size > 0)
> -    {
> -      clist_size--;
> -    }
> -
>    /* Verify the certificate path (chain) 
>     */
>    for (i = clist_size - 1; i > 0; i--)
> _______________________________________________
> Gnutls-devel mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/gnutls-devel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]