ios - 如何设置 WolfSSL 密码列表?

标签 ios c encryption wolfssl

我有一个 IOT 设备,它使用 DTLS 1.2 协议(protocol) 进行通信。我们已经将 WolfSSL 集成到我们的项目中,并且运行良好。我想要实现的是只为我的 WolfSSL 客户端 设置一个特定的密码套件,这样我就可以确保它使用正确的加密方法。

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)

When I print the cipher list;

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)

If I call wolfSSL_get_cipher(ssl) I got result "NONE".

这将返回握手期间选择的密码套件。如果您在握手成功后调用它(即:ret = wolfSSL_connect(ssl);其中 ret 是 WOLFSSL_SUCCESS),您将看到在握手期间协商了哪个密码套件。

3) 最后,据我所知,您没有做错任何事情,事实上,这是朝着获得以预期方式失败的可重现设置迈出的良好第一步。 (IE 仅限于一个密码套件)。


有助于快速解决的步骤:

1)调试:

您能否分享您看到的错误代码(如果有)?我看到您已经将 DEBUG_WOLFSSL 添加到您的设置中,您现在可以在您的应用程序中调用 wolfSSL_Debugging_ON(); 以生成调试日志。您可以分享它以供审核吗?

2) Wireshark:

捕获失败的连接通常可以提供有关失败原因的非常有用的线索。查看握手在哪个点失败也非常有助于诊断原因。

Moreover, we have also an Android application that communicates with the same device using "PSK-AES128-CCM-8" encryption method. That's why I want to set my list only this specific method.

太棒了!如果您可以从 Android 设备捕获成功的连接并将该捕获与失败的连接进行比较,我们可以比较客户端问候和服务器响应数据包中的差异。

3) 作为最后的手段,如果您不能快速缩小范围,您可以随时通过官方支持 channel 联系我们的 wolfSSL 支持团队,方法是发送电子邮件至 [support (at) wolfssl (dot) com] 或通过在 [wolfssl (dot) zendesk (dot) com] 访问我们的 zendesk 门户。我们的团队总是乐于尽我们所能提供帮助。

关于ios - 如何设置 WolfSSL 密码列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56055281/

相关文章:

ios - 使用 KIF 从屏幕边缘滑动(测试 UIScreenEdgePanGestureRecognizer)?

c - 将函数名称作为字符指针传递给 C 中的 pthread_create

c - 如何使用 PID Controller ?

java - 在 JNI 中使用 GetIntArrayElements 打印数组元素

javascript - React Native : App Store Rejection, 支持 IPv6

ios - 向上滚动时 UITableView 有延迟

ruby-on-rails - Heroku 数据库和 amazon s3 加密 key 存储以符合 HIPAA

node.js - 在 Node.js 中使用私钥/公钥加密文件最合适、最安全的方法是什么

javascript - CryptoJS AES 无法解密

iphone - UIBezierPath 路径太多 = 太慢?