c++ - 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);
...
当我尝试编译时,它给了我以下错误:
显然,参数类型不正确,但为什么它对其他人有效(例如here和here)?一个 int 作为函数的参数对我来说没有意义。希望您能够帮助我。
解决方案
首先,请避免发布带有编译器输出的屏幕截图。相反,请复制输出文本并将其粘贴到您的帖子中(使用相关格式)。
您似乎正在使用具有不同接口的旧版本WiFiClientSecure 库setCACert()
-需要两个参数,即密钥及其长度。你为什么不试试呢?
net.setCACert((const uint8_t*)AWS_CERT_CA, sizeof(AWS_CERT_CA) - 1);
剥离终止空值,因为该- 1
函数似乎采用二进制 blob,而那些通常不带有终止符。如果身份验证不起作用,请尝试删除该减法。
推荐阅读
- generics - 如何在Java8中使用流返回特定类型的数组而不是泛型类型
- python - 如何在 Python 中将 dict 元素值作为列表
- r - 使用 y 轴值在 ggplot2 中创建辅助 x 轴
- c# - 通过脚本更改导入的图像设置
- c# - 在 IIS 上托管时拆分字符串会引发 InvalidOperationException
- rust - 如何使用 ioctl + nix 宏来获取可变大小的缓冲区
- python - 查找列表中缺失的元素
- ruby-on-rails-4 - 应用程序未加载:“本地主机没有发送任何数据。ERR_EMPTY_RESPONSE”
- arduino - 如何防止其他电话/手机号码向 Arduino 发送 SMS 命令?
- python - 在 python 中使用参数从不同的文件夹运行脚本(如在 cmd 中)