首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置WolfSSL密码列表?

如何设置WolfSSL密码列表?
EN

Stack Overflow用户
提问于 2019-05-09 08:30:15
回答 1查看 575关注 0票数 2

我有一个IOT设备,可以与DTLS 1.2 protocol通信。我们已经将WolfSSL集成到我们的项目中,而且它运行得很好。我想要实现的是只为我的WolfSSL client设置一个特定的密码套件,这样我将确保它使用的是正确的加密方法。

代码语言:javascript
复制
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);

当我打印密码列表时;

代码语言:javascript
复制
for (int i = 0; i< 50; i++) {
    // print cipher list based on priority
    NSLog(@"->%s", wolfSSL_get_cipher_list(i));
}

结果将是

代码语言:javascript
复制
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;

代码语言:javascript
复制
/* 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
EN

回答 1

Stack Overflow用户

发布于 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)。我们的球队总是很乐意尽我们所能提供帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56055281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档