|
|
@@ -135,6 +135,9 @@ static void free_secure_context(void *ctx)
|
|
|
assert(ctx != NULL);
|
|
|
esp_tls_cfg_server_t *cfg = (esp_tls_cfg_server_t *)ctx;
|
|
|
ESP_LOGI(TAG, "Server shuts down, releasing SSL context");
|
|
|
+ if (cfg->cacert_buf) {
|
|
|
+ free((void *)cfg->cacert_buf);
|
|
|
+ }
|
|
|
if (cfg->servercert_buf) {
|
|
|
free((void *)cfg->servercert_buf);
|
|
|
}
|
|
|
@@ -150,8 +153,22 @@ static esp_tls_cfg_server_t *create_secure_context(const struct httpd_ssl_config
|
|
|
if (!cfg) {
|
|
|
return NULL;
|
|
|
}
|
|
|
+/* cacert = CA which signs client cert, or client cert itself , which is mapped to client_verify_cert_pem */
|
|
|
+ if(config->client_verify_cert_pem != NULL) {
|
|
|
+ cfg->cacert_buf = (unsigned char *)malloc(config->client_verify_cert_len);
|
|
|
+ if (!cfg->cacert_buf) {
|
|
|
+ ESP_LOGE(TAG, "Could not allocate memory");
|
|
|
+ free(cfg);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ memcpy((char *)cfg->cacert_buf, config->client_verify_cert_pem, config->client_verify_cert_len);
|
|
|
+ cfg->cacert_bytes = config->client_verify_cert_len;
|
|
|
+ }
|
|
|
+/* servercert = cert of server itself ( in our case it is mapped to cacert in https_server example) */
|
|
|
cfg->servercert_buf = (unsigned char *)malloc(config->cacert_len);
|
|
|
if (!cfg->servercert_buf) {
|
|
|
+ ESP_LOGE(TAG, "Could not allocate memory");
|
|
|
+ free((void *)cfg->cacert_buf);
|
|
|
free(cfg);
|
|
|
return NULL;
|
|
|
}
|
|
|
@@ -160,7 +177,9 @@ static esp_tls_cfg_server_t *create_secure_context(const struct httpd_ssl_config
|
|
|
|
|
|
cfg->serverkey_buf = (unsigned char *)malloc(config->prvtkey_len);
|
|
|
if (!cfg->serverkey_buf) {
|
|
|
+ ESP_LOGE(TAG, "Could not allocate memory");
|
|
|
free((void *)cfg->servercert_buf);
|
|
|
+ free((void *)cfg->cacert_buf);
|
|
|
free(cfg);
|
|
|
return NULL;
|
|
|
}
|