我正在开发一个应用程序,其中密钥服务器(K)生成对称密钥并与Server(A)和Client(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加密的示例代码?我在网上找不到任何好的教程或示例。
在执行此操作时,我指的是这篇文章,但我使用的是Memory BIO
https://bitbucket.org/tiebingzhang/tls-psk-server-client-example/src/783092f802383421cfa1088b0e7b804b39d3cf7c/psk_server.c?at=default&fileviewer=file-view-default
最佳答案
我不能告诉你为什么密码不存在。我只能假定它在您拥有的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的示例。