OpenSSL TLS/DTLS PSK

Dil*_*eth 1 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 加密的示例代码?我在网上找不到任何好的教程或示例。

我在执行此操作时参考了这篇文章,但我使用的是内存 BIO https://bitbucket.org/tiebingzhang/tls-psk-server-client-example/src/783092f802383421cfa1088b0e7b804b39d3cf7c/psk_server.c?at=default&fileviewer=文件视图默认值

Sha*_*ell 5

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

\n

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

\n

服务器:

\n
# use a 48 byte PSK\n$ PSK=63ef2024b1de6417f856fab7005d38f6df70b6c5e97c220060e2ea122c4fdd054555827ab229457c366b2dd4817ff38b \n$ openssl s_server -psk $PSK -cipher TLS13-AES-256-GCM-SHA384 -nocert -accept 2020\n
Run Code Online (Sandbox Code Playgroud)\n

客户:

\n
$ openssl s_client -psk $PSK -connect localhost:2020 \nCONNECTED(00000003)\n---\nno peer certificate available\n---\nNo client certificate CA names sent\nServer Temp Key: X25519, 253 bits\n---\nSSL handshake has read 195 bytes and written 475 bytes\nVerification: OK\n---\nReused, TLSv1.3, Cipher is TLS13-AES-256-GCM-SHA384\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

@xkcd

\n

对于 openssl 3.0 及更高版本,由于此问题,上述命令不起作用。

\n

使用 openssl 3.1 我无法让它与 AES-256-GCM-SHA384 一起使用,我认为这与 SHA384 有关。同样在 3.0 及更高版本中,您必须对 v1.3 tls 密码使用 -ciphersuites 选项,因为 -ciphers 选项现在仅适用于 1.2 tls。

\n

我为使其正常工作所做的是:

\n

服务器:

\n
# use a 48 byte PSK\n$ PSK=63ef2024b1de6417f856fab7005d38f6df70b6c5e97c220060e2ea122c4fdd054555827ab229457c366b2dd4817ff38b \n$ openssl s_server -psk $PSK -ciphersuites TLS_CHACHA20_POLY1305_SHA256 -nocert -accept 2020\n
Run Code Online (Sandbox Code Playgroud)\n

客户:

\n
$ openssl s_client -psk $PSK -connect localhost:2020 -ciphersuites TLS_CHACHA20_POLY1305_SHA256\n
Run Code Online (Sandbox Code Playgroud)\n