C++ openssl:编辑密码套件

C++ openssl: editing ciphersuites

我有一个使用 openssl 库的非常基本的 C++ 应用程序。 应用程序向服务器发送请求并且密码套件列表必须是下一个:

4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53

(可以在这里找到密码套件的代码:https://docs.microsoft.com/en-us/dotnet/api/system.net.security.tlsciphersuite?view=net-5.0

但是当我在应用程序中手动设置密码套件时,它看起来是这样的:

4865-4866-4867-49195-49199-52393-49196-49200-159-52393-52392-52394-49195-49199-158-49188-49192-107-49187-49191- 103-49162-49172-57-49161-49171-51-157-156-61-60-53-47-255

我正在尝试以这种方式设置密码套件: SSL_set_ciphersuites(ssl, "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256");

所以问题是:如何从密码组列表中删除确切的密码组?

正在尝试使用!和 - 如此处所述 (https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) SSL_set_ciphersuites(ssl, "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:-TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256");

但运气不好。

更新:

在 SSL_set_ciphersuites 之前使用 SSL_set_cipher_list 帮助了我。但是现在我有另一个问题: 当我使用下一个列表时:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_AES_256_CBC_SHA

我得到 4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53-255 但是我无法理解 255 到底从哪里来?它不应该出现。

  1. 根据 man3 SSL_set_ciphersuites,您列表中的密码套装 TLS_ECDHE_* 对该函数无效。

Valid TLSv1.3 ciphersuite names are:

TLS_AES_128_GCM_SHA256 TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_CCM_SHA256 TLS_AES_128_CCM_8_SHA256

  1. 您确定要连接的服务器使用 TLSv1.3 而不是 TLSv1.2,并且您还应该使用 SSL_set_cipher_list() 和 SSL_set_ciphersuites()。