我正在开发客户端/服务器软件,并试图弄清楚如何使用 openssl 设置 TLS 1.3 PSK 连接。显然,与 TLS 1.2(及更低版本)相比有不同的回调,但 openssl 文档很糟糕,我无法真正理解完整流程。
有人可以提供有关如何在这些回调中返回信息的示例代码吗?
int SSL_psk_use_session_cb_func(SSL *ssl, const EVP_MD *md,const unsigned char **id,size_t *idlen,SSL_SESSION **sess);
int (*SSL_psk_find_session_cb_func)(SSL *ssl,const unsigned char *identity,size_t identity_len,SSL_SESSION **sess);
Run Code Online (Sandbox Code Playgroud)
有人可以提供有关如何在这些回调中返回信息的示例代码吗?
您可以在此处查看 s_client 是如何执行的:
这是 s_server 如何做到的:
我的理解是,在 TLS1.3 中 Identity Hint 是 NULL,那么为什么这些 TLS1.3 特定的回调中有标识字段呢?
身份提示和身份是两个不同的东西。在 TLSv1.2 中,服务器可以向客户端提供提示,以允许客户端为该服务器选择正确的身份。在 TLSv1.3 中,PSK 的工作方式完全不同。客户端在第一条消息中将身份发送到服务器,因此没有机会收到提示。在实践中,提示通常并不那么有用。
在 PSK 的上下文中,您可以将身份视为有点像用户名(这实际上有点过于简化 - 但对于我们这里的目的来说已经足够了)
在某处阅读 TLS 1.3 有一组不同的密码套件,PSK AES256 和 PSK CHACHA20 的名称是什么
在 TLSv1.2 中,您需要使用特殊的 PSK 密码套件。在 TLSv1.3 中,情况不再如此。密码套件的工作方式完全不同,并且没有具有特殊 PSK 密码套件的概念。您只需使用普通的密码套件。需要注意的主要事情是,在 TLSv1.3 中,PSK 始终与哈希相关联(例如 SHA256)。您使用的任何密码套件都必须与该哈希兼容,例如对于 SHA256,您可以使用 TLS_CHACHA20_POLY1305_SHA256 或 TLS_AES_128_GCM_SHA256。
就我而言,服务器将只接受一个连接,即 P2P 数据链路。我是否仍然需要让一侧充当服务器,即使用 find_session_cb 而不是 use_session_cb?
在 TLS 中,客户端被定义为发起通信的对等方,而服务器是接收传入连接的对等方。因此,始终存在客户端和服务器角色。所以,是的,一侧必须使用find_session_cb
,另一侧必须使用use_session_cb
.
归档时间: |
|
查看次数: |
2339 次 |
最近记录: |