Hello,
I use an ESP32 with Arduino IDE and want to communicate with the REST API of a smart home controller (Bosch smart home). The connection needs to be https. Its necessary to use a self-signed certificate and key to establish the connection. I generated both via openssl. I simply want to get some information from the controller via GET from https://192.168.0.94:8444/smarthome/rooms.
I included the key and certificate in Postman (settings -> certificates) and it works perfectly to receive the data via GET. Unfortunately, it doesn't work with my program below on the ESP32. I use the same certificate and key.
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
const char* ssid = "myssd";
const char* password = "mypassword";
const char* client_key = "-----BEGIN PRIVATE KEY-----\n" \
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDoh0jP2seMtAjy\n" \
"ipqF3xTsZgc0AE0ZzKKiqdrelUaZdC7p5mjpkcr2VC8aq1yVyzzjNlfSmUIuUoEW\n" \
"6COPPMHaNYAZBEDQ+/kbBV7fqlyi4k8db7ymAOHO9NpUkRhP/Wmd6HSwEmJyh3eh\n" \
"urDQ8AGeke8EawcTnNve6tDvlAHUvHnHqqQcBt9IcmErapsPpYPJp0dJykcki7KG\n" \
"gueZyACbV5eiqI5Om2+yA79NC3z/ClKkYjCSiH4+LkemItGBhFwXfu/l0mSH+7TX\n" \
"4F66dXqHITP6tAc9v8R8jAlFGAh1J0Opdw1+vHkRBBzXaGDZXCUaVcYu6qJP2rjj\n" \
"aJ4boO35AgMBAAECggEAKQAXsNzLBE6HaFrTqci+y/smiH8IGUU5pRRtnQM1vl+b\n" \
"2Q7RT2PvZXVNE/cEvX3nV8nwfNgcsQXHsMYQZRSJuuPlmSOkmSTg1OiixK3ppSfh\n" \
"2tclrKCpsEAA0ln+LzaH/bmr/5LSTI8B42DDhifXpUHmowELL6RgKYN+gUv38a5O\n" \
"7Cbs7Pp53yp0WQi4rwHZRp8BkFa7+Ys1OfDVOuo9Tmhu7W+3ElNskBlq49fMr1ro\n" \
"++F2Rc+mXvf9aYOlwlZkHtN9vi9nffciPyuyeIxcrY+XpQMmoOY9HE/RmWHP9NIw\n" \
"ciKYdzYIF9NsF3DiyPyZuvAfILH/3VpX7tlkV/xP3QKBgQD+5lLcHU7A8+6QpXGc\n" \
"m6ajQWiSMQSeG6+XrK3IrrTVpC8vnzNk7KCl5LADPIH2/SGUeykyOUhtY0EH7TU7\n" \
"R8stxWPhZCa+AjtYiKCt+GQa0zJ3G16XNQEkQXb1qHUMsoil2OMmXiRLdWnZrbe0\n" \
"eOH2zg/0qcjq6qEBAWwKxPsyhQKBgQDpiD1M8hafe1N7HGHRwkpyh6El1tehgeFS\n" \
"U1C3fUFXg0jJiTYt3MPu5y+obkwuDJiZxHsc2+buzuaHKWT3QKMwYyOlKEW/AUPr\n" \
"eaVwL7QdILpS2skly/gyb+L+v/qcCw7oEOZBkrqs6nliBSdtdVIYSaDwk+ZTvy+k\n" \
"qQzv6NLZ5QKBgQC3Oc7UBIkor++LsDEzlrs43PqTI4MjN9mHmIuvFs5MR+HXRIPI\n" \
"B0QPG4zeNq9hYGGz/rgFLyH953vGe99oxlmphBsg2EH1EVuhb0y44TTsB2ZeMaFT\n" \
"5bj1W81sFnRU9Ty+omHdoYxLZZH59CJ6Ku6a31Ke1zDilFe5hlEoiKHclQKBgQCA\n" \
"dKlLduqMxRiRYnZIHDg5MXOpzbiEpV2cnCmNFL/pdFSITwpXRdUcx1wGqM0Mk28p\n" \
"PdN+d1NazsItXM6l1o8tIYtM4I8k1nxWvW4L/KF1WDhFNQVp3f1jOPpCqLUgOlDz\n" \
"w7/0F9LJJJyqFy2t3tfOdkmpq6EJNePuDfMI0CeTJQKBgBUrxpYdrcky7iYM9uMW\n" \
"on4p6N0lIMmG3BX69Xp+qJLtchbPK77J9pv41Dy4XlMWbiyULr3/nRlMxayGtChl\n" \
"GCBVsyjjecOS2YoWlJWmr/+IVTJiN3LOLZjjLON1wQhy9nk4SEuL1zzkbJm+avuo\n" \
"nZCdwulmKMmYZyFOg3QfRkC/\n" \
"-----END PRIVATE KEY-----\n";
const char* client_cert = "-----BEGIN CERTIFICATE-----\n" \
"MIIDyTCCArGgAwIBAgIURexqsGAq/U2q/KDrHQYJqYZAUL0wDQYJKoZIhvcNAQEL\n" \
"BQAwczELMAkGA1UEBhMCREUxCzAJBgNVBAgMAkJFMQ8wDQYDVQQHDAZCRXJsaW4x\n" \
"DDAKBgNVBAoMA0VTUDEMMAoGA1UECwwDRVNQMQwwCgYDVQQDDANFU1AxHDAaBgkq\n" \
"hkiG9w0BCQEWDWhvaG9ob0Blc3AuZGUwIBcNMjQxMDAxMjA1MzExWhgPMjA1MjAy\n" \
"MTYyMDUzMTFaMHMxCzAJBgNVBAYTAkRFMQswCQYDVQQIDAJCRTEPMA0GA1UEBwwG\n" \
"QkVybGluMQwwCgYDVQQKDANFU1AxDDAKBgNVBAsMA0VTUDEMMAoGA1UEAwwDRVNQ\n" \
"MRwwGgYJKoZIhvcNAQkBFg1ob2hvaG9AZXNwLmRlMIIBIjANBgkqhkiG9w0BAQEF\n" \
"AAOCAQ8AMIIBCgKCAQEA6IdIz9rHjLQI8oqahd8U7GYHNABNGcyioqna3pVGmXQu\n" \
"6eZo6ZHK9lQvGqtclcs84zZX0plCLlKBFugjjzzB2jWAGQRA0Pv5GwVe36pcouJP\n" \
"HW+8pgDhzvTaVJEYT/1pneh0sBJicod3obqw0PABnpHvBGsHE5zb3urQ75QB1Lx5\n" \
"x6qkHAbfSHJhK2qbD6WDyadHScpHJIuyhoLnmcgAm1eXoqiOTptvsgO/TQt8/wpS\n" \
"pGIwkoh+Pi5HpiLRgYRcF37v5dJkh/u01+BeunV6hyEz+rQHPb/EfIwJRRgIdSdD\n" \
"qXcNfrx5EQQc12hg2VwlGlXGLuqiT9q442ieG6Dt+QIDAQABo1MwUTAdBgNVHQ4E\n" \
"FgQUKwSyP0Cle0HkI8UW8hAwHeoRc54wHwYDVR0jBBgwFoAUKwSyP0Cle0HkI8UW\n" \
"8hAwHeoRc54wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAgmr4\n" \
"dmcWJoZ03clRrvpZIm88eY+cfkBxHgqYQqiuX3rxLd/ggpyJg4/qFTMd0XgZc2oc\n" \
"m1+wAX4iJ/5ZuIpfdpAmAtv0kBg6Br2W9lREDJx8lOFgO7Ae7GAQ7F5V9rQQNl3R\n" \
"Kfb44OqukWHfcj46XuRx+tsGODzasrl0c9Jl/77eUK5eSDuHada8xmiLEew8pUSB\n" \
"xHMqh2VZJ5BZbTkWzekBUeOVbw7EFaI5L6vZA4quuf9lvvoPxoFVvUip0GzxLaeh\n" \
"9TQqMO5yZwvtHEuX1sa/X/x64uRsmyLUjBlAj/iwyNO3Wt4paXqzKXXjio4ClKCq\n" \
"CCbO1A1+YrGnHMgtqg==\n" \
"-----END CERTIFICATE-----\n";
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(" connected!");
WiFiClientSecure *client = new WiFiClientSecure;
HTTPClient https;
client->setPrivateKey(client_key);
client->setCertificate(client_cert);
client->setInsecure();
Serial.println("Connecting to server...");
https.begin(*client, "https://192.168.0.94:8444/smarthome/rooms");
int httpCode = https.GET();
if (httpCode > 0) {
Serial.printf("GET... code: %d\n", httpCode);
String payload = https.getString();
Serial.println(payload);
}
else {
Serial.printf("Connection failed, error: %s\n", https.errorToString(httpCode).c_str());
}
https.end();
}
void loop() {
}
I get the following messages on serial monitor:
Connecting to WiFi... connected!
Connecting to server...
Connection failed, error: connection refused
Do you have any idea where the mistake could be?
Regards, tobo