Skip to content

Commit c53c9d0

Browse files
committed
altcp_tls_mbedtls: Support Server Name Indication
SNI, or Server Name Indication, is an addition to the TLS encryption protocol that enables a client device to specify the domain name it is trying to reach in the first step of the TLS handshake, preventing common name mismatch errors and not reaching to HTTPS server that enforce this condition. Signed-off-by: Javier Tia <javier.tia@linaro.org>
1 parent 2e7fb97 commit c53c9d0

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

src/apps/altcp_tls/altcp_tls_mbedtls.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ struct altcp_tls_config {
106106
u8_t pkey_count;
107107
u8_t pkey_max;
108108
mbedtls_x509_crt *ca;
109+
char host[256];
109110
#if defined(MBEDTLS_SSL_CACHE_C) && ALTCP_MBEDTLS_USE_SESSION_CACHE
110111
/** Inter-connection cache for fast connection startup */
111112
struct mbedtls_ssl_cache_context cache;
@@ -643,6 +644,7 @@ altcp_mbedtls_setup(void *conf, struct altcp_pcb *conn, struct altcp_pcb *inner_
643644
/* tell mbedtls about our I/O functions */
644645
mbedtls_ssl_set_bio(&state->ssl_context, conn, altcp_mbedtls_bio_send, altcp_mbedtls_bio_recv, NULL);
645646

647+
mbedtls_ssl_set_hostname(&state->ssl_context, config->host);
646648
altcp_mbedtls_setup_callbacks(conn, inner_conn);
647649
conn->inner_conn = inner_conn;
648650
conn->fns = &altcp_mbedtls_functions;
@@ -952,7 +954,7 @@ altcp_tls_create_config_server_privkey_cert(const u8_t *privkey, size_t privkey_
952954
}
953955

954956
static struct altcp_tls_config *
955-
altcp_tls_create_config_client_common(const u8_t *ca, size_t ca_len, int is_2wayauth)
957+
altcp_tls_create_config_client_common(const u8_t *ca, size_t ca_len, int is_2wayauth, char *host)
956958
{
957959
int ret;
958960
struct altcp_tls_config *conf = altcp_tls_create_config(0, (is_2wayauth) ? 1 : 0, (is_2wayauth) ? 1 : 0, ca != NULL);
@@ -974,13 +976,15 @@ altcp_tls_create_config_client_common(const u8_t *ca, size_t ca_len, int is_2way
974976

975977
mbedtls_ssl_conf_ca_chain(&conf->conf, conf->ca, NULL);
976978
}
979+
980+
memcpy(conf->host, host, sizeof(conf->host));
977981
return conf;
978982
}
979983

980984
struct altcp_tls_config *
981-
altcp_tls_create_config_client(const u8_t *ca, size_t ca_len)
985+
altcp_tls_create_config_client(const u8_t *ca, size_t ca_len, char *host)
982986
{
983-
return altcp_tls_create_config_client_common(ca, ca_len, 0);
987+
return altcp_tls_create_config_client_common(ca, ca_len, 0, host);
984988
}
985989

986990
struct altcp_tls_config *
@@ -996,7 +1000,7 @@ altcp_tls_create_config_client_2wayauth(const u8_t *ca, size_t ca_len, const u8_
9961000
return NULL;
9971001
}
9981002

999-
conf = altcp_tls_create_config_client_common(ca, ca_len, 1);
1003+
conf = altcp_tls_create_config_client_common(ca, ca_len, 1, NULL);
10001004
if (conf == NULL) {
10011005
return NULL;
10021006
}

src/include/lwip/altcp_tls.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ struct altcp_tls_config *altcp_tls_create_config_server_privkey_cert(const u8_t
9292
/** @ingroup altcp_tls
9393
* Create an ALTCP_TLS client configuration handle
9494
*/
95-
struct altcp_tls_config *altcp_tls_create_config_client(const u8_t *cert, size_t cert_len);
95+
struct altcp_tls_config *altcp_tls_create_config_client(const u8_t *cert, size_t cert_len, char *host);
9696

9797
/** @ingroup altcp_tls
9898
* Create an ALTCP_TLS client configuration handle with two-way server/client authentication

0 commit comments

Comments
 (0)