mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
				
	
	
		
			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
 |