开放SSL

密码学和 SSL/TLS 工具包

ssl

名称

ossl-guide-libssl-introduction, ssl - OpenSSL 指南:libssl 简介

简介

OpenSSL 的 libssl 库提供了多种安全网络通信协议的实现。具体来说,它提供了 SSL/TLS(SSLv3、TLSv1、TLSv1.1、TLSv1.2 和 TLSv1.3)、DTLS(DTLSv1 和 DTLSv1.2)以及 QUIC(仅限客户端)。该库依赖于 libcrypto 来执行底层的密码学操作(参见 ossl-guide-libcrypto-introduction(7))。

libssl 提供的 API 集在所有这些不同的网络协议中都是通用的,因此,熟悉使用其中一个协议编写应用程序的开发人员可以轻松地过渡到使用其他协议。

使用 libssl 编写的应用程序将包含 <openssl/ssl.h> 头文件,并且通常会使用两个主要的 数据结构,即 SSLSSL_CTX

SSL 对象用于表示与远程对等方的连接。一旦与远程对等方建立了连接,就可以与该对等方交换数据。

使用 DTLS 时,交换的任何数据都使用“数据报”语义,即数据包可以以任何顺序传递,并且不保证它们一定会到达。在这种情况下,用于连接的 SSL 对象也用于与对等方交换数据。

TLS 和 QUIC 都支持数据“流”的概念。通过流发送的数据保证按顺序传递,不会丢失任何数据。流可以是单向的或双向的。

SSL/TLS 每个连接只支持一个数据流,并且它始终是双向的。在这种情况下,用于连接的 SSL 对象也表示该流。有关更多信息,请参见 ossl-guide-tls-introduction(7)

QUIC 协议每个连接可以支持多个流,这些流可以是单向的或双向的。在这种情况下,SSL 对象可以表示底层连接、流或两者。当使用多个流时,每个流都会使用一个单独的 SSL 对象。有关更多信息,请参见 ossl-guide-quic-introduction(7)

SSL_CTX 对象用于创建底层连接的 SSL 对象。单个 SSL_CTX 对象可以用于创建许多连接(每个连接由一个单独的 SSL 对象表示)。libssl 中的许多 API 函数以两种形式存在:一种接受 SSL_CTX,另一种接受 SSL。通常,您应用于 SSL_CTX 的设置将被您从中创建的任何 SSL 对象继承。或者,您可以直接应用设置到 SSL 对象,而不会影响其他 SSL 对象。请注意,在从 SSL_CTX 创建第一个 SSL 对象后,通常不应该对它进行更改。

数据结构

除了 SSL_CTXSSL 之外,应用程序可能还需要使用许多其他数据结构。它们在下文总结。

SSL_METHOD(SSL 方法)

此结构用于指示您要建立的连接类型,例如,它是否代表客户端或服务器,以及它是否使用 SSL/TLS、DTLS 或 QUIC(仅限客户端)。它在创建 SSL_CTX 时作为参数传递。

SSL_SESSION(SSL 会话)

在与对等方建立连接后,可以重复使用已商定的加密材料来更快地与同一对等方创建未来的连接。用于此类未来连接建立尝试的数据集被收集到一个 SSL_SESSION 对象中。与对等方的单个成功连接可能会为未来的连接尝试生成零个或多个此类 SSL_SESSION 对象。

SSL_CIPHER(SSL 密码)

在连接建立期间,客户端和服务器会就它们要用于加密和其他用途的加密算法达成一致。一组要一起使用的加密算法被称为密码套件。此类集合由一个 SSL_CIPHER 对象表示。

可以在 SSL_CTXSSL 中配置可用于使用的密码套件集。

进一步阅读

有关 SSL/TLS 协议的介绍,请参见 ossl-guide-tls-introduction(7),有关 QUIC 的介绍,请参见 ossl-guide-quic-introduction(7)

有关 libcrypto 的介绍,请参见 ossl-guide-libcrypto-introduction(7)

参见

ossl-guide-libcrypto-introduction(7)ossl-guide-tls-introduction(7)ossl-guide-quic-introduction(7)

版权所有 2000-2023 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0 版(“许可证”)授权。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取一份副本。