Méthode d'authentification de transmission HTTP

1. Introduction

ESP-TLS fournit plusieurs méthodes d'authentification telles que : crt_bundle_attach , global_ca_store , CA certificate , etc.

Voici les implémentations de trois des méthodes d'authentification dans le fichier esp_http_client.c .

    if (config->crt_bundle_attach != NULL) {
#ifdef CONFIG_MBEDTLS_CERTIFICATE_BUNDLE
        esp_transport_ssl_crt_bundle_attach(ssl, config->crt_bundle_attach);
#else //CONFIG_MBEDTLS_CERTIFICATE_BUNDLE
        ESP_LOGE(TAG, "use_crt_bundle configured but not enabled in menuconfig: Please enable MBEDTLS_CERTIFICATE_BUNDLE option");
#endif
    } else if (config->use_global_ca_store == true) {
        esp_transport_ssl_enable_global_ca_store(ssl);
    } else if (config->cert_pem) {
        if (!config->cert_len) {
            esp_transport_ssl_set_cert_data(ssl, config->cert_pem, strlen(config->cert_pem));
        } else {
            esp_transport_ssl_set_cert_data_der(ssl, config->cert_pem, config->cert_len);
        }
    }

2. Consignes spécifiques

 2.1 crt_bundle_attach

Pour s'authentifier avec le certificat racine x509 personnalisé fourni par l'API du package de certificat ESP x509, les éléments suivants doivent être configurés via menuconfig :

CONFIG_MBEDTLS_CERTIFICATE_BUNDLE:自动构建并附加bundle。  
 
CONFIG_MBEDTLS_DEFAULT_CERTIFICATE_BUNDLE:决定从完整的根列表中包含哪些证书。  
 
CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE_PATH:指定要嵌入到包中的任何其他证书的路径。

2.2 global_ca_store。

Le global_ca_store peut être initialisé et défini en une seule fois.

2.3 Certificat CA (format pem ou der)

L'implémentation spécifique est dans transport_ssl.c

void esp_transport_ssl_set_cert_data(esp_transport_handle_t t, const char *data, int len)
{
    GET_SSL_FROM_TRANSPORT_OR_RETURN(ssl, t);
    ssl->cfg.cacert_pem_buf = (void *)data;
    ssl->cfg.cacert_pem_bytes = len + 1;//(如果是PEM格式,则包括null终止符) 
}
void esp_transport_ssl_set_cert_data_der(esp_transport_handle_t t, const char *data, int len)
{
    GET_SSL_FROM_TRANSPORT_OR_RETURN(ssl, t);
    ssl->cfg.cacert_buf = (void *)data;
    ssl->cfg.cacert_bytes = len;
}

En plus des trois méthodes ci-dessus, il existe

psk_hint_key : authentification par clé pré-partagée

ignorer la vérification du serveur : ignorer la vérification

L'exemple officiel utilise l'authentification par certificat CA au format pem et le fichier de certificat est " project\server_certs\ca_cert.pem ".

Guess you like

Origin blog.csdn.net/tsliuch/article/details/127512254