尝试客户端身份验证时,MbedTLS 握手无法正常工作

问题描述 投票:0回答:1

我尝试过各种密码套件、EC 曲线点和哈希算法。但是,服务器拒绝状态 8 中的连接,此时客户端需要发送证书和客户端密钥交换。

我正在使用 STM32F777ZIT6 MCU,并且我已经在没有客户端身份验证的情况下为不同的代理测试了我的代码,该代码正在运行。我添加了这些行用于客户端身份验证:

ret = mbedtls_x509_crt_parse(&cacert, (const unsigned char *)ca_crt, strlen(ca_crt) + 1);
if (ret != 0) return -1;

ret = mbedtls_x509_crt_parse(&clicert, (const unsigned char *)cli_crt, strlen(cli_crt) + 1);
if (ret != 0) return -1;

ret = mbedtls_pk_parse_key(&pkey, (const unsigned char *)cli_key, strlen(cli_key) + 1, NULL, 0);
if (ret != 0) return -1;

if ((ret = mbedtls_ssl_conf_own_cert(&conf, &clicert, &pkey)) != 0) {
    return -1;
}

我已使用 Python 脚本验证了我的证书和密钥的正确性,并且它们按预期运行。但是,我缺乏足够的 mbedtls 配置设置经验。我们将非常感谢您的帮助。

谢谢你。

mqtt stm32 mbedtls
1个回答
0
投票

使用 mbed TLS 有时会导致内存问题,尤其是在处理证书和安全连接时。在我最近的项目中,我在使用 mbed TLS 支持的应用程序时遇到了类似的问题。幸运的是,我通过调整 mbed TLS 处理内存的方式找到了解决方案。

经过一番挖掘,我发现在 mbed TLS 中启用动态内存使用可以解决问题。我所要做的就是在 mbed TLS 配置中定义 MBEDTLS_MEMORY_BUFFER_ALLOC_C。此更改允许 mbed TLS 使用 calloc 和 free 等动态内存函数来执行其内部任务。

© www.soinside.com 2019 - 2024. All rights reserved.