OpenSSL TLS/DTLS PSK

Posted

技术标签:

【中文标题】OpenSSL TLS/DTLS PSK【英文标题】: 【发布时间】:2019-03-08 09:24:14 【问题描述】:

我正在开发一个应用程序,其中密钥服务器 (K) 生成对称密钥并与服务器 (A) 和客户端 (B) 共享。 A 和 B 通过 UDP 连接。 我正在使用内存 BIO,并尝试使用密码“PSK-AES128-CBC-SHA”。

我有几个与此相关的问题:

    当我们有一个对称密钥时,我们还应该调用 SSL_do_handshake 吗? 当我使用此调用 SSL_CTX_set_cipher_list(context, "PSK-AES128-CBC-SHA"); 设置密码时,我收到错误 SSL routines:ssl_cipher_list_to_bytes:no ciphers available

我尝试使用 TLSV1_2_server_method、TLSV1_2_server_method、DTLS_server_method、DTLS_client_method,但每个方法都因上述错误而失败。

是否有任何可用于 TLS-PSK 加密的示例代码?我在网上找不到任何好的教程或示例。

我在执行此操作时指的是这篇文章,但我使用的是内存 BIO https://bitbucket.org/tiebingzhang/tls-psk-server-client-example/src/783092f802383421cfa1088b0e7b804b39d3cf7c/psk_server.c?at=default&fileviewer=file-view-default

【问题讨论】:

【参考方案1】:

我不能告诉你为什么密码不存在。我只能假设它在您拥有的 openssl 版本中不存在,或者必须将其添加到 openssl 开始。

您知道 tls1.3 中内置了 PSK 支持吗?如果您使用 openssl 1.1.1,您可以从 openssl 命令行执行 PSK。

服务器:

# use a 48 byte PSK
$ PSK=63ef2024b1de6417f856fab7005d38f6df70b6c5e97c220060e2ea122c4fdd054555827ab229457c366b2dd4817ff38b 
$ openssl s_server -psk $PSK -cipher TLS13-AES-256-GCM-SHA384 -nocert -accept 2020

客户:

$ openssl s_client -psk $PSK -connect localhost:2020 
CONNECTED(00000003)
---
no peer certificate available
---
No client certificate CA names sent
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 195 bytes and written 475 bytes
Verification: OK
---
Reused, TLSv1.3, Cipher is TLS13-AES-256-GCM-SHA384
…

因此,我建议您查看 openssl 1.1.1 s_server 和 s_client 命令的源代码,以查看如何在 tls1.3 中使用 PSK 的示例。

【讨论】:

以上是关于OpenSSL TLS/DTLS PSK的主要内容,如果未能解决你的问题,请参考以下文章

EMQ X 服务器 SSL/TLS 安全连接配置指南

Libp2p学习

深信服SDWAN跟其他家对比

php7.2.29编译openssl报错?

openssl 自签名证书 - 安装openssl(一)

openssl命令详解