我正在开发一个客户机/服务器软件,并试图找出如何使用openssl设置TLS1.3PSK连接。显然,与TLS1.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);
发布于 2019-11-06 09:35:35
有人能提供如何在这些回调中返回信息的示例代码吗?
您可以在这里查看s_client是如何做到的:
下面是s_server是如何做到的:
我的理解是,在TLS1.3中,标识提示是空的,那么为什么这些TLS1.3特定的回调在它们中有标识字段?
身份暗示和身份是两种不同的事物。在TLSv1.2中,服务器可以向客户机提供一个提示,以允许客户端为该服务器选择正确的标识。在TLSv1.3中,PSKs的工作方式完全不同。客户端在第一条消息中将标识发送到服务器,因此没有机会接收提示。在实践中,提示通常并不那么有用。
在PSK的上下文中,您可以认为身份有点像用户名(这实际上有点过于简化--但对于我们这里的目的来说已经足够了)
请阅读TLS1.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
。
发布于 2020-04-19 15:55:49
我希望您的意思是外部建立PSK (带外PSK键和ID)与TLSv1.3。为此,您可以直接使用旧回调psk_client_callback
和psk_server_callback
。使用这些回调,默认情况下使用AES_128_GCM_WITH_SHA256
加密套件。
在这里,ClientHello
msg用PSK_ID发送pre_shared_key
扩展,而ServerHello
用选择的PSK_ID索引作为0来响应pre_shared_key
扩展。
如果您需要使用不同的密件,那么您需要使用psk_use_session_cb
和psk_find_session_cb
。
https://stackoverflow.com/questions/58719595
复制相似问题