1 @node Introduction to GnuTLS
2 @chapter Introduction to GnuTLS
4 In brief @acronym{GnuTLS} can be described as a library which offers an API
5 to access secure communication protocols. These protocols provide
6 privacy over insecure lines, and were designed to prevent
7 eavesdropping, tampering, or message forgery.
9 Technically @acronym{GnuTLS} is a portable ANSI C based library which
10 implements the protocols ranging from SSL 3.0 to TLS 1.2 (see @ref{Introduction to TLS},
11 for a detailed description of the protocols), accompanied
12 with the required framework for authentication and public key
13 infrastructure. Important features of the @acronym{GnuTLS} library
18 @item Support for TLS 1.2, TLS 1.1, TLS 1.0 and SSL 3.0 protocols.
20 @item Support for Datagram TLS 1.0.
22 @item Support for handling and verification of @acronym{X.509} and @acronym{OpenPGP} certificates.
24 @item Support for password authentication using @acronym{TLS-SRP}.
26 @item Support for keyed authentication using @acronym{TLS-PSK}.
28 @item Support for TPM, @acronym{PKCS} #11 tokens and smart-cards.
32 The @acronym{GnuTLS} library consists of three independent parts, namely the ``TLS
33 protocol part'', the ``Certificate part'', and the ``Cryptographic
34 back-end'' part. The ``TLS protocol part'' is the actual protocol
35 implementation, and is entirely implemented within the
36 @acronym{GnuTLS} library. The ``Certificate part'' consists of the
37 certificate parsing, and verification functions and it uses
38 functionality from the
39 libtasn1@footnote{@url{http://www.gnu.org/software/libtasn1/}} library.
40 The ``Cryptographic back-end'' is provided by the nettle@footnote{@url{http://www.lysator.liu.se/~nisse/nettle/}}
44 * Downloading and installing::
48 @node Downloading and installing
49 @section Downloading and installing
53 GnuTLS is available for download at:
54 @url{http://www.gnutls.org/download.html}
56 GnuTLS uses a development cycle where even minor version numbers
57 indicate a stable release and a odd minor version number indicate a
58 development release. For example, GnuTLS 1.6.3 denote a stable
59 release since 6 is even, and GnuTLS 1.7.11 denote a development
60 release since 7 is odd.
62 GnuTLS depends on Libnettle, and you will need to install it
63 before installing GnuTLS. Libnettle is available from
64 @url{http://www.lysator.liu.se/~nisse/nettle/}.
65 Don't forget to verify the cryptographic signature after downloading
68 The package is then extracted, configured and built like many other
69 packages that use Autoconf. For detailed information on configuring
70 and building it, refer to the @file{INSTALL} file that is part of the
71 distribution archive. Typically you invoke @code{./configure} and
72 then @code{make check install}. There are a number of compile-time
73 parameters, as discussed below.
75 The compression library, libz, as well as p11-kit are a optional dependencies.
76 You can get libz from @url{http://www.zlib.net/} and p11-kit from @url{http://p11-glue.freedesktop.org/}.
78 The X.509 part of GnuTLS needs ASN.1 functionality, from a library
79 called libtasn1. A copy of libtasn1 is included in GnuTLS. If you
80 want to install it separately (e.g., to make it possibly to use
81 libtasn1 in other programs), you can get it from
82 @url{http://www.gnu.org/software/gnutls/download.html}.
84 A few @code{configure} options may be relevant, summarized below.
85 They disable or enable particular features,
86 to create a smaller library with only the required features.
87 Note however, that although a smaller library is generated, the
88 included programs are not guarranteed to compile if some of these
92 --disable-srp-authentication
93 --disable-psk-authentication
94 --disable-anon-authentication
96 --disable-openpgp-authentication
97 --disable-openssl-compatibility
102 For the complete list, refer to the output from @code{configure --help}.
104 @node Document overview
106 In this document we present an overview of the supported security protocols in @ref{Introduction to TLS}, and
107 continue by providing more information on the certificate authentication in @ref{Certificate authentication},
108 and shared-key as well anonymous authentication in @ref{Shared-key and anonymous authentication}. We
109 elaborate on certificate authentication by demonstrating advanced usage of the API in @ref{More on certificate authentication}.
110 The core of the TLS library is presented in @ref{How to use GnuTLS in applications} and example
111 applications are listed in @ref{GnuTLS application examples}.
112 In @ref{Other included programs} the usage of few included programs that
113 may assist debugging is presented. The last chapter is @ref{Internal architecture of GnuTLS} that
114 provides a short introduction to GnuTLS' internal architecture.