首页 > 解决方案 > WiFiClientSecure setCaCert 不接受我的参数

问题描述

我目前正在尝试将我的 ESP32 连接到 AWS IoT。因此,我必须使用证书来加密连接。理论上我知道这将如何工作,但我不是 C++ 专业人士,我得到了一个错误。当然,我尝试 google,但我总是找到对我不起作用的相同解决方案。具体来说,我尝试在头文件中声明一个 cacert,如下所示:

const char AWS_CERT_CA[] = "-----BEGIN CERTIFICATE-----\n" \
"MIIDQTChkiG9w0CAimfz5m/jAo5gAwIBBgkqBAkPmljZbyjQsAgITBmy4vB4iANF\n" \
"ADA5MGQW1hem5sGQW1hemDVVUzEMQxBBDVhMQsYDVQQQGEwJQDExBBbWF6\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"-----END CERTIFICATE-----\n";

在主文件中,我尝试像这样使用它:

WiFiClientSecure net = WiFiClientSecure();
void connectToAWS()
{
    // Configure WiFiClientSecure to use the AWS certificates we generated
    net.setCACert(AWS_CERT_CA);
    net.setCertificate(AWS_CERT_CRT);
    net.setPrivateKey(AWS_CERT_PRIVATE);
...

当我尝试编译时,它给了我以下错误:

在此处输入图像描述

显然,参数类型不正确,但为什么它对其他人有效(例如herehere)?一个 int 作为函数的参数对我来说没有意义。希望您能够帮助我。

标签: c++amazon-web-servicesiotesp32aws-iot-core

解决方案


首先,请避免发布带有编译器输出的屏幕截图。相反,请复制输出文本并将其粘贴到您的帖子中(使用相关格式)。

您似乎正在使用具有不同接口的旧版本WiFiClientSecure 库setCACert()-需要两个参数,即密钥及其长度。你为什么不试试呢?

net.setCACert((const uint8_t*)AWS_CERT_CA, sizeof(AWS_CERT_CA) - 1);

剥离终止空值,因为该- 1函数似乎采用二进制 blob,而那些通常不带有终止符。如果身份验证不起作用,请尝试删除该减法。


推荐阅读