Http传输认证方式

一、简介

ESP-TLS提供多种认证方式如:crt_bundle_attachglobal_ca_storeCA证书

下面是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.1 crt_bundle_attach

用 ESP x509证书包API提供的自定义x509根证书认证,需要通过menuconfig配置以下各项:

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

2.2 global_ca_store。

可以一次性初始化和设置global_ca_store。

2.3 CA证书(pem或der格式)

具体实现在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;
}

除上述三种方式外还有

psk_hint_key:预共享密钥认证

skip server verification:跳过认证

官方示例使用的是pem格式CA证书认证,证书文件为“工程\server_certs\ca_cert.pem”。

猜你喜欢

转载自blog.csdn.net/tsliuch/article/details/127512254
今日推荐