我有一个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),我得到的结果是“无”。
在我们的IOT设备的固件被更新之前,这个库是正常工作的,然后我们开始没有收到它的响应。在我回溯响应失败之后,我意识到这是SSL握手问题,于是我决定设置一个密码列表。我在想,我遗漏了什么或者做错了什么吗?
此外,我们还有一个Android应用程序,使用"PSK-AES128-CCM-8“加密方法与同一设备通信。这就是为什么我只想设置我的列表这个特定的方法。
另外,这是user_settings.h for WolfSSL;
/* 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发布于 2019-05-09 16:18:46
@efdalustaoglu,
我很遗憾地听说,设备固件更新导致了这一失败。让我看看能否令人满意地处理未知或意外的问题,然后提出一种有助于更快解决这一问题的办法:
1)
当我打印密码列表时; (int i= 0;i< 50;i++) { //基于优先级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)最后,从我所看到的情况来看,你并没有做错任何事情,事实上,这是朝着以一种预期的方式失败的可复制的设置迈出的第一步。(仅限一组密码)
有助于快速解决以下问题的步骤:
1)调试:
你能分享你看到的错误代码(如果有的话)吗?我看到您已经将DEBUG_WOLFSSL添加到您的设置中,您现在可以在应用程序中调用wolfSSL_Debugging_ON();来生成调试日志。你能和我分享一下吗?
2) Wireshark:
捕获失败的连接通常会提供非常有用的线索,说明失败的原因。从握手的哪一点看,它的失败对诊断病因也是非常有利的。
此外,我们还有一个Android应用程序,使用"PSK-AES128-CCM-8“加密方法与同一设备通信。这就是为什么我只想设置我的列表这个特定的方法。
太棒了!如果您可以从android设备捕获一个成功的连接,并将该捕获与失败的连接进行比较,我们可以比较客户机Hello响应数据包中的不同之处。
3)作为最后手段,如果您不能迅速缩小范围,您可以通过官方支持渠道与我们的wolfSSL支持团队联系,通过发送电子邮件支持( at ) wolfssl (点) com或访问我们的zendesk门户网站wolfssl (点) zendesk (dot.com)。我们的球队总是很乐意尽我们所能提供帮助。
https://stackoverflow.com/questions/56055281
复制相似问题