文字列からファイルに保存した 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 クライアントとnet
var を除くすべての変数)、スクリプトで定義されているがここでは共有されていない変数がいくつかあります。
ここで私が間違っていることを誰か知っていますか?
次の方法を使用して証明書と秘密鍵を定義すると、まったく同じコードが機能します。
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
certificate_content_here
-----END CERTIFICATE-----
)EOF";
私は何を間違っていますか?