=pod

=head1 NAME

ossl-guide-libssl-introduction, ssl
- OpenSSL Guide: An introduction to libssl

=head1 INTRODUCTION

The OpenSSL C<libssl> library provides implementations of several secure network
communications protocols. Specifically it provides SSL/TLS (SSLv3, TLSv1,
TLSv1.1, TLSv1.2 and TLSv1.3), DTLS (DTLSv1 and DTLSv1.2) and QUIC (client side
only). The library depends on C<libcrypto> for its underlying cryptographic
operations (see L<ossl-guide-libcrypto-introduction(7)>).

The set of APIs supplied by C<libssl> is common across all of these different
network protocols, so a developer familiar with writing applications using one
of these protocols should be able to transition to using another with relative
ease.

An application written to use C<libssl> will include the F<< <openssl/ssl.h> >>
header file and will typically use two main data structures, i.e. B<SSL> and
B<SSL_CTX>.

An B<SSL> object is used to represent a connection to a remote peer. Once a
connection with a remote peer has been established data can be exchanged with
that peer.

When using DTLS any data that is exchanged uses "datagram" semantics, i.e.
the packets of data can be delivered in any order, and they are not guaranteed
to arrive at all. In this case the B<SSL> object used for the connection is also
used for exchanging data with the peer.

Both TLS and QUIC support the concept of a "stream" of data. Data sent via a
stream is guaranteed to be delivered in order without any data loss. A stream
can be uni- or bi-directional.

SSL/TLS only supports one stream of data per connection and it is always
bi-directional. In this case the B<SSL> object used for the connection also
represents that stream. See L<ossl-guide-tls-introduction(7)> for more
information.

The QUIC protocol can support multiple streams per connection and they can be
uni- or bi-directional. In this case an B<SSL> object can represent the
underlying connection, or a stream, or both. Where multiple streams are in use
a separate B<SSL> object is used for each one. See
L<ossl-guide-quic-introduction(7)> for more information.

An B<SSL_CTX> object is used to create the B<SSL> object for the underlying
connection. A single B<SSL_CTX> object can be used to create many connections
(each represented by a separate B<SSL> object). Many API functions in libssl
exist in two forms: one that takes an B<SSL_CTX> and one that takes an B<SSL>.
Typically settings that you apply to the B<SSL_CTX> will then be inherited by
any B<SSL> object that you create from it. Alternatively you can apply settings
directly to the B<SSL> object without affecting other B<SSL> objects. Note that
you should not normally make changes to an B<SSL_CTX> after the first B<SSL>
object has been created from it.

=head1 DATA STRUCTURES

As well as B<SSL_CTX> and B<SSL> there are a number of other data structures
that an application may need to use. They are summarised below.

=over 4

=item B<SSL_METHOD> (SSL Method)

This structure is used to indicate the kind of connection you want to make, e.g.
whether it is to represent the client or the server, and whether it is to use
SSL/TLS, DTLS or QUIC. It is passed as a parameter when creating
the B<SSL_CTX>.

=item B<SSL_SESSION> (SSL Session)

After establishing a connection with a peer the agreed cryptographic material
can be reused to create future connections with the same peer more rapidly. The
set of data used for such a future connection establishment attempt is collected
together into an B<SSL_SESSION> object. A single successful connection with a
peer may generate zero or more such B<SSL_SESSION> objects for use in future
connection attempts.

=item B<SSL_CIPHER> (SSL Cipher)

During connection establishment the client and server agree upon cryptographic
algorithms they are going to use for encryption and other uses. A single set
of cryptographic algorithms that are to be used together is known as a
ciphersuite. Such a set is represented by an B<SSL_CIPHER> object.

The set of available ciphersuites that can be used are configured in the
B<SSL_CTX> or B<SSL>.

=back

=head1 FURTHER READING

See L<ossl-guide-tls-introduction(7)> for an introduction to the SSL/TLS
protocol and L<ossl-guide-quic-introduction(7)> for an introduction to QUIC.

See L<ossl-guide-libcrypto-introduction(7)> for an introduction to C<libcrypto>.

=head1 SEE ALSO

L<ossl-guide-libcrypto-introduction(7)>, L<ossl-guide-tls-introduction(7)>,
L<ossl-guide-quic-introduction(7)>

=head1 COPYRIGHT

Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
