开放SSL

密码学和 SSL/TLS 工具包

ossl-guide-libssl-introduction

名称

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 中获取副本。