我有一个与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
答案 0 :(得分:1)
@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”。
这将返回在握手期间选择的密码套件。如果您在成功握手后调用此代码(即ret = wolfSSL_connect(ssl);其中ret是WOLFSSL_SUCCESS),您将看到在握手期间协商了哪个密码套件。
3)最后,从我所看到的来看,您没有做任何错误,实际上,这是朝着以预期的方式失败的可重现设置迈出的良好第一步。 (即,IE仅限于一个密码套件)。
可以帮助您快速解决的步骤:
1)调试:
您可以共享看到的错误代码(如果有)吗?我看到您已经在设置中添加了DEBUG_WOLFSSL,现在可以在应用程序中调用wolfSSL_Debugging_ON();
来生成调试日志。您可以分享以供审查吗?
2)Wireshark:
捕获失败的连接通常可以提供有关失败原因的非常有用的线索。找出握手失败的那一点在诊断原因方面也非常有利。
此外,我们还有一个Android应用程序,可使用“ PSK-AES128-CCM-8”加密方法与同一设备通信。这就是为什么我只想将此列表设置为特定方法。
那太好了!如果您可以从android设备捕获成功的连接并将该捕获与失败的连接进行比较,我们可以比较“客户端问候”和“服务器响应”数据包中的区别。
3)作为万不得已的方法,如果您不能迅速缩小范围,可以随时通过官方支持渠道与我们的wolfSSL支持团队联系,方法是发送电子邮件至[support(at)wolfssl(dot)com]或在[wolfssl(dot)zendesk(dot)com]上访问我们的zendesk门户。我们的团队总是很乐意尽我们所能提供帮助。