查看源代码 SSL 应用程序

ssl 应用程序提供了通过套接字进行安全通信的功能。

描述

ssl 应用程序是 Erlang 中 TLS(以前称为 SSL)和 DTLS 协议的实现。

有关当前标准合规性的声明,请参阅用户指南

依赖项

SSL 应用程序使用 Public_KeyAsn1Crypto 应用程序来处理公钥和加密,因此必须加载这些应用程序,SSL 应用程序才能工作。在嵌入式环境中,这意味着它们必须在使用 application:start/1,2 启动 SSL 应用程序之前启动。

配置

本节中定义的应用程序环境配置参数适用于 SSL 应用程序。有关配置参数的更多信息,请参阅 Kernel 中的 application 手册页。

注意

所有包含“session_ticket”字样的参数仅为 TLS-1.3 配置,其他会话参数仅为 TLS-1.3 之前的配置。DTLS 版本基于 TLS 版本,请参阅标准合规性以了解映射关系。

可以在命令行上设置环境参数,例如

erl -ssl protocol_version "['tlsv1.2', 'tlsv1.1']"

  • protocol_version = ssl:tls_version/0 | [ssl:tls_version/0] <optional> - 启动的客户端和服务器支持的协议。如果未设置此选项,则默认为当前支持的所有 TLS 协议,SSL 应用程序可能会配置更多协议。可以使用 ssl:connect/2,3ssl:listen/2 的 version 选项覆盖此选项。

  • dtls_protocol_version = ssl:dtls_version/0 | [ssl:dtls_version/0] <optional> - 启动的客户端和服务器支持的协议。如果未设置此选项,则默认为当前支持的所有 DTLS 协议,SSL 应用程序可能会配置更多协议。可以使用 ssl:connect/2,3ssl:listen/2 的 version 选项覆盖此选项。

  • session_lifetime = integer() <optional> - 会话数据的最大生存期(以秒为单位)。默认为 24 小时,这是 RFC 5246 建议的最大生存期。但是,由于会话缓存表的最大限制,会话可能会提前失效。

  • session_cb = atom() <optional> - 自 OTP-23.3 起已弃用,由 client_session_cbserver_session_cb 替换

  • client_session_cb = atom() <optional> - 自 OTP-23.3 起生效,会话缓存回调模块的客户端名称,该模块实现了 ssl_session_cache_api 行为。默认为 ssl_client_session_cache_db

  • server_session_cb = atom() <optional> - 自 OTP-23.3 起生效,会话缓存回调模块的服务器名称,该模块实现了 ssl_session_cache_api 行为。默认为 ssl_server_session_cache_db

  • session_cb_init_args = proplist:proplist() <optional> - 自 OTP-23.3 起已弃用,由 client_session_cb_init_argsserver_session_cb_init_args 替换

  • client_session_cb_init_args = proplist:proplist() <optional> - 会话缓存回调模块中 init 函数的额外用户定义参数列表。默认为 []

  • server_session_cb_init_args = proplist:proplist() <optional> - 会话缓存回调模块中 init 函数的额外用户定义参数列表。默认为 []

  • session_cache_client_max = integer() <optional>
    限制客户端会话缓存的增长,即缓存多少个到服务器的会话供新的客户端连接使用。如果达到会话的最大数量,则当前缓存条目将失效,无论其剩余生存期如何。默认为 1000。建议使用 ssl-8.2.1 或更高版本,以使此选项按预期工作。

  • session_cache_server_max = integer() <optional> - 限制服务器会话缓存的增长,即服务器缓存多少个客户端会话。如果达到会话的最大数量,则当前缓存条目将失效,无论其剩余生存期如何。默认为 1000。建议使用 ssl-8.2.1 或更高版本,以使此选项按预期工作。

  • ssl_pem_cache_clean = integer() <optional> - PEM 缓存验证之间的时间间隔(以毫秒为单位)。默认为 2 分钟。

    注意:可以通过调用 ssl:clear_pem_cache/0 重新加载缓存。

  • bypass_pem_cache = boolean() <optional> - 在 ssl-8.0.2 中引入。禁用 PEM 缓存。可以用作 ssl-8.1.1 之前 PEM 缓存瓶颈的解决方法。默认为 false。

  • alert_timeout = integer() <optional> - 发送致命警报和关闭连接之间的时间间隔(以毫秒为单位)。等待一段时间可以提高对等方正确接收警报的机会,以便它可以正常关闭。默认为 5000 毫秒。

  • internal_active_n = integer() <optional> - 对于 TLS 连接,此值用于处理内部套接字。由于实现已从 active once 更改为 active N 行为(N = 100),出于性能原因,此选项的存在是为了在不可预见的情况下进行可能的调整或恢复旧行为(internal_active_n = 1)。该选项不会影响通过 TLS 进行的 Erlang 分布,后者将始终以 active N 模式运行。在 ssl-9.1 (OTP-21.2) 中添加。

  • server_session_tickets_amount = integer() <optional> - 服务器发送的会话票证数量。必须大于 0。默认为 3。

  • server_session_ticket_lifetime = integer() <optional> - 服务器发送的会话票证的生存期。服务器不得使用大于 604800 秒(7 天)的任何值。过期的票证会自动删除。默认为 7200 秒(2 小时)。

  • server_session_ticket_store_size = integer() <optional> - 设置服务器会话票证存储(有状态票证)的最大大小。默认为 1000。大小限制通过删除旧票证来强制执行。

  • server_session_ticket_max_early_data = integer() <optional> - 设置服务器接受的早期数据的最大大小,还配置其 NewSessionTicket 消息在其 early_data_indication 扩展中包含相同的最大大小限制。默认为 16384。大小限制由客户端和服务器强制执行。

  • client_session_ticket_lifetime = integer() <optional> - 客户端票证存储中会话票证的生存期。过期的票证会自动删除。默认为 7200 秒(2 小时)。

  • client_session_ticket_store_size = integer() <optional> - 设置客户端会话票证存储的最大大小。默认为 1000。大小限制通过删除旧票证来强制执行。

错误日志记录器和事件处理程序

SSL 应用程序使用 OTP 日志记录器。TLS/DTLS 警报以 notice 级别记录。意外错误以 error 级别记录。这些日志条目默认将进入默认的 Erlang 日志。选项 log_level 可以在运行时用于设置特定 TLS 连接的日志级别,当您想使用 debug 级别来检查 TLS 握手设置时,这很方便。

另请参阅

application