[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
4.4.1 Trading security for interoperability
If you connect to a server and use GnuTLS’ functions to verify the
certificate chain, and get a GNUTLS_CERT_INSECURE_ALGORITHM
validation error (see Verifying X.509 certificate paths), it means
that somewhere in the certificate chain there is a certificate signed
using RSA-MD2
or RSA-MD5
. These two digital signature
algorithms are considered broken, so GnuTLS fails verifying
the certificate. In some situations, it may be useful to be
able to verify the certificate chain anyway, assuming an attacker did
not utilize the fact that these signatures algorithms are broken.
This section will give help on how to achieve that.
It is important to know that you do not have to enable any of
the flags discussed here to be able to use trusted root CA
certificates self-signed using RSA-MD2
or RSA-MD5
. The
certificates in the trusted list are considered trusted irrespective
of the signature.
If you are using gnutls_certificate_verify_peers2 to verify the certificate chain, you can call gnutls_certificate_set_verify_flags with the flags:
-
GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD2
-
GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5
as in the following example:
gnutls_certificate_set_verify_flags (x509cred, GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5);
This will tell the verifier algorithm to enable RSA-MD5
when
verifying the certificates.
If you are using gnutls_x509_crt_verify or
gnutls_x509_crt_list_verify, you can pass the
GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5
parameter directly in the
flags
parameter.
If you are using these flags, it may also be a good idea to warn the
user when verification failure occur for this reason. The simplest is
to not use the flags by default, and only fall back to using them
after warning the user. If you wish to inspect the certificate chain
yourself, you can use gnutls_certificate_get_peers to extract
the raw server’s certificate chain, gnutls_x509_crt_list_import to parse each of the certificates, and
then gnutls_x509_crt_get_signature_algorithm to find out the
signing algorithm used for each certificate. If any of the
intermediary certificates are using GNUTLS_SIGN_RSA_MD2
or
GNUTLS_SIGN_RSA_MD5
, you could present a warning.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on January 4, 2012 using texi2html 5.0.