0

我正在尝试从 SPIFFS 中获取 3 个密钥,这些密钥从字符串存储到文件中(从 API 端点获取时)。

我能够使用 SPIFFS 库读取文件并在串行控制台中打印出这些值。当我检查内容时,它们很好。当我使用secureClient.setCACert()函数中的内容时,它们会“中断”并抛出异常;E][ssl_client.cpp:36] _handle_error(): [start_ssl_client():138]: (-8576) X509 - The CRT/CRL/CSR format is invalid, e.g. different type expected

我的代码如下所示:

#include <WiFiClientSecure.h>
#include <FS.h>
#include <SPIFFS.h>


WiFiClientSecure net = WiFiClientSecure();

String read2String(const char * path) {
    String output = "";
    
    File file = SPIFFS.open(path, "r");
    if (!file || file.isDirectory()) {
        return "";
    }
    
    while (file.available()) {
      char c = file.read();
      output.concat(c);
    }
    file.close();
    
    return output;
}

void readFilesToVariables() {
  String awsRootCa = read2String("/AmazonRootCA1.pem");
  String privateKey = read2String("/private.pem.key");
  String certificate = read2String("/certificate.pem.crt");

  net.setCACert(awsRootCa.c_str());
  net.setCertificate(certificate.c_str());
  net.setPrivateKey(privateKey.c_str());
}

void setup() {
  Serial.begin(115200);
  SPIFFS.begin();

  readFilesToVariables();

  mqttClient.begin(AWS_IOT_ENDPOINT, AWS_IOT_ENDPOINT_PORT, net); // crashes here (I think)

...
}

mqttClient.begin(...)在线(mqtt 客户端和除netvar 之外的所有变量)有几个在我的脚本中定义但未在此处共享的变量。

有人知道我在这里做错了什么吗?

当我使用以下方法定义证书和私钥时,完全相同的代码可以工作:

static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
certificate_content_here
-----END CERTIFICATE-----
)EOF";

我究竟做错了什么?

4

0 回答 0