116 lines
4.7 KiB
Plaintext
116 lines
4.7 KiB
Plaintext
|
=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 (client only). 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-2023 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
|