Handle server_hostname argument in espressif SSLContext.wrap_socket

This commit is contained in:
Tim Hawes 2021-12-13 17:11:31 +00:00
parent bcb516c496
commit ef414bf1bd
3 changed files with 7 additions and 4 deletions

View File

@ -47,6 +47,11 @@ ssl_sslsocket_obj_t *common_hal_ssl_sslcontext_wrap_socket(ssl_sslcontext_obj_t
sock->ssl_context = self;
sock->sock = socket;
// Create a copy of the ESP-TLS config object and store the server hostname
// Note that ESP-TLS will use common_name for both SNI and verification
memcpy(&sock->ssl_config, &self->ssl_config, sizeof(self->ssl_config));
sock->ssl_config.common_name = server_hostname;
esp_tls_t *tls_handle = esp_tls_init();
if (tls_handle == NULL) {
mp_raise_espidf_MemoryError();
@ -55,6 +60,5 @@ ssl_sslsocket_obj_t *common_hal_ssl_sslcontext_wrap_socket(ssl_sslcontext_obj_t
// TODO: do something with the original socket? Don't call a close on the internal LWIP.
// Should we store server hostname on the socket in case connect is called with an ip?
return sock;
}

View File

@ -55,9 +55,7 @@ void common_hal_ssl_sslsocket_close(ssl_sslsocket_obj_t *self) {
void common_hal_ssl_sslsocket_connect(ssl_sslsocket_obj_t *self,
const char *host, size_t hostlen, uint32_t port) {
esp_tls_cfg_t *tls_config = NULL;
tls_config = &self->ssl_context->ssl_config;
int result = esp_tls_conn_new_sync(host, hostlen, port, tls_config, self->tls);
int result = esp_tls_conn_new_sync(host, hostlen, port, &self->ssl_config, self->tls);
self->sock->connected = result >= 0;
if (result < 0) {
int esp_tls_code;

View File

@ -39,6 +39,7 @@ typedef struct {
socketpool_socket_obj_t *sock;
esp_tls_t *tls;
ssl_sslcontext_obj_t *ssl_context;
esp_tls_cfg_t ssl_config;
} ssl_sslsocket_obj_t;
#endif // MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_SSL_SSLSOCKET_H