证书压缩API
功能简介
证书压缩,即Certificate Compression,是定义在RFC 8879,提供了一种对TLS握手过程中Certificate消息的压缩能力,从而实现减小TLS握手字节传输数量的目的。
数据结构和头文件
#include <openssl/ssl.h>
typedef int (*SSL_cert_compress_cb_fn)(SSL *s,
const unsigned char *in, size_t inlen,
unsigned char *out, size_t *outlen);
typedef int (*SSL_cert_decompress_cb_fn)(SSL *s,
const unsigned char *in, size_t inlen,
unsigned char *out, size_t outlen);
函数指针说明:
SSL_cert_compress_cb_fn指向一个执行实际压缩动作的函数,该函数对in和inlen所定义的数据进行压缩,并将结果通过out和outlen返回。如果out为NULL,则该函数应当通过outlen返回计算后的压缩数据长度。该函数成功时返回1,失败时返回0.
SSL_cert_decompress_cb_fn的功能和SSL_cert_compress_cb_fn类似,不过提供的是解压缩的能力。
压缩算法定义:
TLSEXT_cert_compression_zlib
TLSEXT_cert_compression_brotli
TLSEXT_cert_compression_zstd
以上三个宏分别对应ZLIB, Brotli和Zstandard三种压缩算法,这些压缩算法也是铜锁的证书压缩功能所支持的。
SSL_add_cert_compression_alg
函数原型
int SSL_add_cert_compression_alg(SSL *s, int alg_id,
SSL_cert_compress_cb_fn compress,
SSL_cert_decompress_cb_fn decompress);
该函数向SSL对象s注册一组证书压缩算法的接口,包括对Certtificate消息进行压缩处理的compress回调函数,以及对CompressedCertifcate消息进行解压缩处理的decompress回调函数。压缩算法是通过alg_id参数指定的。
函数参数
参数 | 类型 | 说明 |
---|---|---|
s | SSL | |
alg_id | int | 见#DzCwD |
compress | SSL_cert_compress_cb_fn | |
decompress | SSL_cert_decompress_cb_fn |
示例
无
返回值
返回值 | 含义 | 说明 |
---|---|---|
1 | 成功 | |
0 | 失败 |
版本信息
Tongsuo/BabaSSL 8.3.0以及之后版本支持此特性。
注意事项
无
SSL_CTX_add_cert_compression_alg
函数原型
int SSL_CTX_add_cert_compression_alg(SSL_CTX *ctx, int alg_id,
SSL_cert_compress_cb_fn compress,
SSL_cert_decompress_cb_fn decompress);