Code: Select all
[Codebox=cpp ]
const String URL = "https://ota.xxxx.com/api";
// Lets Encrypt Root Certificate (Self Signed)
static const char* ota_root_ca=\
"-----BEGIN CERTIFICATE-----\n" \
"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\n" \
"-----END CERTIFICATE-----\n";
HTTPClient client;
WiFiClientSecure WFSclient;
String updateCerts1(String cert_OTP)
{
String msg = "Begin Update...";
Serial.println(msg);
WFSclient.setCACert(ota_root_ca);
if (!WFSclient.connect(URL.c_str(), 443))
{
Serial.println("Connection failed!");
}
else
{
Serial.println("Connected to server!");
// create HTTP request
WFSclient.println("GET https://ota.xxxx.com HTTP/1.0");
WFSclient.println("Host: ota.xxxx.com");
WFSclient.println("Connection: close");
WFSclient.println();
Serial.print("Waiting for response ");
while (!WFSclient.available())
{
delay(50); //
Serial.print(".");
}
// if data is available then receive and print to Terminal
while (WFSclient.available())
{
char c = WFSclient.read();
Serial.write(c);
}
// if the server disconnected, stop the client
if (!WFSclient.connected())
{
Serial.println();
Serial.println("Server disconnected");
WFSclient.stop();
}
}
return "OK";
}
String updateCerts2(String cert_OTP)
{
//Connect
String msg = "Begin Update...";
Serial.println(msg);
String finalURL = URL+"/OTAData/GetFile?otp="+cert_OTP;
boolean start = client.begin(finalURL, ota_root_ca);
msg = String(start);
Serial.println(msg);
int8_t resp = client.GET();
msg = ("ServerResponse:"+String(resp));
Serial.println(msg);
if (resp > 0)
{
String payload = client.getString();
msg = ("ServerPayload:"+String(payload));
Serial.println(msg);
int32_t payload_length = client.getSize();
msg = ("ServerPayloadLength:"+String(payload_length));
Serial.println(msg);
return "OK";
}
else
{
return ("Error");
}
client.end();
}
[/Codebox]
updateCerts1(String) : this Throws : handle_error(): X509 - Certificate verification failed, e.g. CRL, CA or signature check failed
Error Code : message code: -9984
updateCerts2(String) throws :
[E][ssl_client.cpp:36] _handle_error(): [start_ssl_client():202]: (-78) UNKNOWN ERROR CODE (004E)
[E][WiFiClientSecure.cpp:132] connect(): start_ssl_client: -78
Sometimes I get : Response = -56
I am using the Letsencrypt Root Certificate (4096 bits) but I have tried with creating my own CA certificate and key of 2048 bits.
I followed the following while creating my own CA :
1. Generate CAkey & CAcert (using CAKey)
2. Generate server cert (ota.xxxx.com) and signed it using CA cert and CAkey using openssl ca command
3. installed the CAcert as ota_root_ca in the above code.
Any help would be greatly appreciated !
Thanks a lot guys