123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- =pod
- =head1 NAME
- SSL_CTX_set1_cert_comp_preference,
- SSL_set1_cert_comp_preference,
- SSL_CTX_compress_certs,
- SSL_compress_certs,
- SSL_CTX_get1_compressed_cert,
- SSL_get1_compressed_cert,
- SSL_CTX_set1_compressed_cert,
- SSL_set1_compressed_cert - Certificate compression functions
- =head1 SYNOPSIS
- #include <openssl/ssl.h>
- int SSL_CTX_set1_cert_comp_preference(SSL_CTX *ctx, int *algs, size_t len);
- int SSL_set1_cert_comp_preference(SSL *ssl, int *algs, size_t len);
- int SSL_CTX_compress_certs(SSL_CTX *ctx, int alg);
- int SSL_compress_certs(SSL *ssl, int alg);
- size_t SSL_CTX_get1_compressed_cert(SSL_CTX *ctx, int alg, unsigned char **data,
- size_t *orig_len);
- size_t SSL_get1_compressed_cert(SSL *ssl, int alg, unsigned char **data,
- size_t *orig_len);
- int SSL_CTX_set1_compressed_cert(SSL_CTX *ctx, int alg,
- unsigned char *comp_data,
- size_t comp_length, size_t orig_length);
- int SSL_set1_compressed_cert(SSL *ssl, int alg, unsigned char *comp_data,
- size_t comp_length, size_t orig_length);
- =head1 DESCRIPTION
- These functions control the certificate compression feature. Certificate
- compression is only available for TLSv1.3 as defined in RFC8879.
- SSL_CTX_set1_cert_comp_preference() and SSL_set1_cert_comp_preference() are used
- to specify the preferred compression algorithms. The B<algs> argument is an array
- of algorithms, and B<length> is number of elements in the B<algs> array. Only
- those algorithms enabled in the library will be accepted in B<algs>, unknown
- algorithms in B<algs> are ignored. On an error, the preference order is left
- unmodified.
- The following compression algorithms (B<alg> arguments) may be used:
- =over 4
- =item * TLSEXT_comp_cert_brotli
- =item * TLSEXT_comp_cert_zlib
- =item * TLSEXT_comp_cert_zstd
- =back
- The above is also the default preference order. If a preference order is not
- specified, then the default preference order is sent to the peer and the
- received peer's preference order will be used when compressing a certificate.
- Otherwise, the configured preference order is sent to the peer and is used
- to filter the peer's preference order.
- SSL_CTX_compress_certs() and SSL_compress_certs() are used to pre-compress all
- the configured certificates on an SSL_CTX/SSL object with algorithm B<alg>. If
- B<alg> is 0, then the certificates are compressed with the algorithms specified
- in the preference list. Calling these functions on a client SSL_CTX/SSL object
- will result in an error, as only server certificates may be pre-compressed.
- SSL_CTX_get1_compressed_cert() and SSL_get1_compressed_cert() are used to get
- the pre-compressed certificate most recently set that may be stored for later
- use. Calling these functions on a client SSL_CTX/SSL object will result in an
- error, as only server certificates may be pre-compressed. The B<data> and
- B<orig_len> arguments are required.
- The compressed certificate data may be passed to SSL_CTX_set1_compressed_cert()
- or SSL_set1_compressed_cert() to provide a pre-compressed version of the
- most recently set certificate. This pre-compressed certificate can only be used
- by a server.
- =head1 NOTES
- Each side of the connection sends their compression algorithm preference list
- to their peer indicating compressed certificate support. The received preference
- list is filtered by the configured preference list (i.e. the intersection is
- saved). As the default list includes all the enabled algorithms, not specifying
- a preference will allow any enabled algorithm by the peer. The filtered peer's
- preference order is used to determine what algorithm to use when sending a
- compressed certificate.
- Only server certificates may be pre-compressed. Calling any of these functions
- (except SSL_CTX_set1_cert_comp_preference()/SSL_set1_cert_comp_preference())
- on a client SSL_CTX/SSL object will return an error. Client certificates are
- compressed on-demand as unique context data from the server is compressed along
- with the certificate.
- For SSL_CTX_set1_cert_comp_preference() and SSL_set1_cert_comp_preference()
- the B<len> argument is the size of the B<algs> argument in bytes.
- The compressed certificate returned by SSL_CTX_get1_compressed_cert() and
- SSL_get1_compressed_cert() is the last certificate set on the SSL_CTX/SSL object.
- The certificate is copied by the function and the caller must free B<*data> via
- OPENSSL_free().
- The compressed certificate data set by SSL_CTX_set1_compressed_cert() and
- SSL_set1_compressed_cert() is copied into the SSL_CTX/SSL object.
- SSL_CTX_compress_certs() and SSL_compress_certs() return an error under the
- following conditions:
- =over 4
- =item * If no certificates have been configured.
- =item * If the specified algorithm B<alg> is not enabled.
- =item * If B<alg> is 0 and no compression algorithms are enabled.
- =back
- Sending compressed certificates may be disabled on a connection via the
- SSL_OP_NO_TX_CERTIFICATE_COMPRESSION option. Receiving compressed certificates
- may be disabled on a connection via the SSL_OP_NO_RX_CERTIFICATE_COMPRESSION
- option.
- =head1 RETURN VALUES
- SSL_CTX_set1_cert_comp_preference(),
- SSL_set1_cert_comp_preference(),
- SSL_CTX_compress_certs(),
- SSL_compress_certs(),
- SSL_CTX_set1_compressed_cert(), and
- SSL_set1_compressed_cert()
- return 1 for success and 0 on error.
- SSL_CTX_get1_compressed_cert() and
- SSL_get1_compressed_cert()
- return the length of the allocated memory on success and 0 on error.
- =head1 SEE ALSO
- L<SSL_CTX_set_options(3)>,
- L<SSL_CTX_use_certificate(3)>
- =head1 HISTORY
- These functions were added in OpenSSL 3.2.
- =head1 COPYRIGHT
- Copyright 2022 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
|