OpenSSL TLS / DTLS PSK

时间:2019-03-08 09:24:15

标签: ssl openssl tls1.2 tls-psk

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

我对此有几个疑问:

  1. 当我们拥有对称密钥时,我们仍应调用SSL_do_handshake吗?
  2. 当我通过此呼叫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加密的示例代码?我在网上找不到任何好的教程或示例。

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

1 个答案:

答案 0 :(得分:2)

我不能告诉你为什么密码不存在。我只能假定它在您拥有的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的示例。