Skip to content

Commit 10954dc

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 <[email protected]>
1 parent e09a750 commit 10954dc

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
@@ -109,6 +109,7 @@ struct altcp_tls_config {
109109
u8_t pkey_count;
110110
u8_t pkey_max;
111111
mbedtls_x509_crt *ca;
112+
char host[256];
112113
#if defined(MBEDTLS_SSL_CACHE_C) && ALTCP_MBEDTLS_USE_SESSION_CACHE
113114
/** Inter-connection cache for fast connection startup */
114115
struct mbedtls_ssl_cache_context cache;
@@ -644,6 +645,7 @@ altcp_mbedtls_setup(void *conf, struct altcp_pcb *conn, struct altcp_pcb *inner_
644645
/* tell mbedtls about our I/O functions */
645646
mbedtls_ssl_set_bio(&state->ssl_context, conn, altcp_mbedtls_bio_send, altcp_mbedtls_bio_recv, NULL);
646647

648+
mbedtls_ssl_set_hostname(&state->ssl_context, config->host);
647649
altcp_mbedtls_setup_callbacks(conn, inner_conn);
648650
conn->inner_conn = inner_conn;
649651
conn->fns = &altcp_mbedtls_functions;
@@ -953,7 +955,7 @@ altcp_tls_create_config_server_privkey_cert(const u8_t *privkey, size_t privkey_
953955
}
954956

955957
static struct altcp_tls_config *
956-
altcp_tls_create_config_client_common(const u8_t *ca, size_t ca_len, int is_2wayauth)
958+
altcp_tls_create_config_client_common(const u8_t *ca, size_t ca_len, int is_2wayauth, char *host)
957959
{
958960
int ret;
959961
struct altcp_tls_config *conf = altcp_tls_create_config(0, (is_2wayauth) ? 1 : 0, (is_2wayauth) ? 1 : 0, ca != NULL);
@@ -975,13 +977,15 @@ altcp_tls_create_config_client_common(const u8_t *ca, size_t ca_len, int is_2way
975977

976978
mbedtls_ssl_conf_ca_chain(&conf->conf, conf->ca, NULL);
977979
}
980+
strlcpy(conf->host, host, sizeof(conf->host));
981+
978982
return conf;
979983
}
980984

981985
struct altcp_tls_config *
982-
altcp_tls_create_config_client(const u8_t *ca, size_t ca_len)
986+
altcp_tls_create_config_client(const u8_t *ca, size_t ca_len, char *host)
983987
{
984-
return altcp_tls_create_config_client_common(ca, ca_len, 0);
988+
return altcp_tls_create_config_client_common(ca, ca_len, 0, host);
985989
}
986990

987991
struct altcp_tls_config *
@@ -997,7 +1001,7 @@ altcp_tls_create_config_client_2wayauth(const u8_t *ca, size_t ca_len, const u8_
9971001
return NULL;
9981002
}
9991003

1000-
conf = altcp_tls_create_config_client_common(ca, ca_len, 1);
1004+
conf = altcp_tls_create_config_client_common(ca, ca_len, 1, NULL);
10011005
if (conf == NULL) {
10021006
return NULL;
10031007
}

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)