●https(ssl) webserver(必要最小限だと以下で動きます、証明書・秘密鍵はご自身でご用意いただくか、idfのsampleにあるもので動作確認可能です x.509(pem)のlengthに+1しないといけないのは仕様らしいです)
#include "esp_https_server.h"
#include "esp_tls.h"
#include "cert.h"
static esp_err_t root_get_handler(httpd_req_t *req) {
httpd_resp_set_type(req, "text/html");
httpd_resp_send(req, "Hello Secure World!
", HTTPD_RESP_USE_STRLEN);
return ESP_OK;
}
static const httpd_uri_t root = {
.uri = "/",
.method = HTTP_GET,
.handler = root_get_handler
};
class WebServerSecure {
public:
WebServerSecure(): conf(HTTPD_SSL_CONFIG_DEFAULT()) { }
~WebServerSecure() { close(); }
void begin() {
//conf.cacert_pem = caCert;
//conf.cacert_len = sizeof(caCert) + 1;
conf.servercert = serverCert;
conf.servercert_len = sizeof(serverCert) + 1;
conf.prvtkey_pem = serverKey;
conf.prvtkey_len = sizeof(serverKey) + 1;
esp_err_t ret = httpd_ssl_start(&server, &conf);
if (ESP_OK != ret) Serial.println("Error starting server!");
}
void RegisterHandler(const httpd_uri_t *uri_handler) {
httpd_register_uri_handler(this->server, uri_handler);
}
void close() {
httpd_ssl_stop(server);
server = nullptr;
}
httpd_handle_t server = nullptr;
httpd_ssl_config_t conf;
};
WebServerSecure sslServer;
void setup() {
Serial.begin(115200);
WiFi.begin();
// ...
sslServer.begin();
sslServer.RegisterHandler(&root);
}
void loop() {
delay(100);
}