ios - 如何设置 WolfSSL 密码列表?
问题描述
我有一个IOT
与DTLS 1.2 protocol
. 我们已经将 WolfSSL 集成到我们的项目中,并且运行良好。我想要实现的是只为我设置一个特定的密码套件,WolfSSL client
以便我确保它使用正确的加密方法。
const char *CIPHER_LIST = "PSK-AES128-CCM-8";
WOLFSSL_CTX *ctx = wolfSSL_CTX_new(wolfDTLSv1_2_client_method());
wolfSSL_CTX_set_cipher_list(ctx, CIPHER_LIST);
WOLFSSL *ssl = wolfSSL_new(ctx)
wolfSSL_set_cipher_list(ssl, CIPHER_LIST);
当我打印密码列表时;
for (int i = 0; i< 50; i++) {
// print cipher list based on priority
NSLog(@"->%s", wolfSSL_get_cipher_list(i));
}
结果将是
DHE-RSA-AES128-SHA
DHE-RSA-AES256-SHA
DHE-PSK-AES256-GCM-SHA384
DHE-PSK-AES128-GCM-SHA256
PSK-AES256-GCM-SHA384
PSK-AES128-GCM-SHA256
DHE-PSK-AES256-CBC-SHA384
DHE-PSK-AES128-CBC-SHA256
PSK-AES256-CBC-SHA384
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA
PSK-AES256-CBC-SHA
DHE-PSK-AES128-CCM
DHE-PSK-AES256-CCM
PSK-AES128-CCM
PSK-AES256-CCM
PSK-AES128-CCM-8
PSK-AES256-CCM-8
DHE-RSA-AES128-SHA256
DHE-RSA-AES256-SHA256
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
EDH-RSA-DES-CBC3-SHA
如果我打电话wolfSSL_get_cipher(ssl)
,我会得到结果“NONE”。
在更新我们的 IOT 设备固件之前,该库一直运行良好,然后我们开始没有收到任何响应。在我回溯响应失败后,我意识到这是一个 SSL 握手问题,我决定设置一个密码列表。我想知道,我有什么遗漏或做错了吗?
此外,我们还有一个 Android 应用程序,它使用“PSK-AES128-CCM-8”加密方法与同一设备通信。这就是为什么我只想设置我的列表这个特定的方法。
此外,这是WolfSSL的 user_settings.h;
/* Configuration */
#define IPHONE /* Needed for Xcode */
#define DEBUG_WOLFSSL
#define HAVE_HASHDRBG
#define HAVE_AESGCM
#define HAVE_AESCCM
#define WOLFSSL_SHA512
#define WOLFSSL_SHA384
#define WOLFSSL_STATIC_PSK
#define WOLFSSL_DTLS
#define NO_WOLFSSL_SERVER
#ifdef HAVE_FIPS
#define NO_MD4
#define NO_HC128
#define NO_RABBIT
#define NO_DSA
#define NO_PWDBASED
#else
#define USE_FAST_MATH
#endif
解决方案
@efdalustaoglu,
得知设备固件更新导致此失败,我深感遗憾。让我看看我是否可以令人满意地解决未知或意外的项目,然后提出一种有助于更快解决此问题的方法:
1)
当我打印密码列表时;
for (int i = 0; i< 50; i++) { // print cipher list based on priority NSLog(@"->%s", wolfSSL_get_cipher_list(i)); }
...
函数 wolfSSL_get_cipher_list 获取所有可用密码的列表,它不会只返回专门设置的密码,这就是为什么您会看到整个列表打印出来的原因。
2)
如果我调用 wolfSSL_get_cipher(ssl) 我得到结果“NONE”。
这将返回在握手期间选择的密码套件。如果在握手成功后调用它(IE:ret = wolfSSL_connect(ssl); ret 是 WOLFSSL_SUCCESS),您将看到在握手期间协商了哪个密码套件。
3)最后,从我所见,您并没有做错任何事,事实上,这是朝着以预期方式失败的可重复设置迈出的良好第一步。(IE 仅限于一个密码套件)。
可帮助快速解决的步骤:
1)调试:
你能分享你看到的错误代码(如果有的话)吗?我看到您已经将 DEBUG_WOLFSSL 添加到您的设置中,您现在可以调用wolfSSL_Debugging_ON();
您的应用程序来生成调试日志。你能分享一下吗?
2) 线鲨:
捕获失败的连接通常可以提供关于失败原因的非常有用的线索。查看握手失败的时间点对于诊断原因也非常有利。
此外,我们还有一个 Android 应用程序,它使用“PSK-AES128-CCM-8”加密方法与同一设备通信。这就是为什么我只想设置我的列表这个特定的方法。
这是极好的!如果您可以从 android 设备捕获成功的连接并将该捕获与失败的连接进行比较,我们可以比较客户端 Hello 和服务器响应数据包中的差异。
3) 作为最后的手段,如果您不能快速缩小范围,您可以随时通过官方支持渠道联系我们的 wolfSSL 支持团队,方法是发送电子邮件至 [support (at) wolfssl (dot) com] 或访问我们的 zendesk [wolfssl (dot) zendesk (dot) com] 的门户。我们的团队总是乐于以任何方式提供帮助。
推荐阅读
- python - sqlite3.OperationalError:靠近“)”:tkinter Python中的语法错误
- php - 当我已经使用工作正常的文章时,如何在 htaccess 中为配置文件用户创建干净的 url
- cassandra - [Ubuntu 20.04]DevCenter 启动时出现错误 java.lang.NoClassDefFoundError: org/w3c/dom/stylesheets/StyleSheet
- git - git push -u origin main 错误(除 master 以外的其他名称)
- rust - 在 Rust 中,将文件读取的数据保持在范围内的正确方法是什么?
- c - 使用 gcc 检测数组展平技巧
- flutter - 是否可以在颤动中以编程方式拖动 DraggableScrollableSheet?
- c# - XAML 无法访问本地化资源
- owl - OWL/Protege:模型推断的一类人,他们不是一个群体的成员
- postgresql - 是否可以使用 Postgres 的字节大小来限制字符长度?