diff --git a/platform/src/ssl_service_cache.cpp b/platform/src/ssl_service_cache.cpp index 55e1aee..8f74be8 100644 --- a/platform/src/ssl_service_cache.cpp +++ b/platform/src/ssl_service_cache.cpp @@ -73,7 +73,7 @@ static size_t ssl_svc_server_st_mk_key(const struct ssl_chello* chello, const st const char* sip=NULL, *sport=NULL, *dip=NULL, *dport=NULL; char * addr_str= tfe_stream_addr_to_str(addr); tfe_stream_addr_str_split(addr_str, &sip, &sport, &dip, &dport); - key_len=snprintf(key_buff, sz, "%s:%s:%s:", dip, dport, chello->sni); + key_len=snprintf(key_buff, sz, "%s:%s:%s:", dip, dport, chello->sni?chello->sni:"null"); free(addr_str); return key_len; } @@ -83,10 +83,11 @@ static size_t ssl_svc_client_st_mk_key(const struct ssl_chello* chello, const st const char* sip=NULL, *sport=NULL, *dip=NULL, *dport=NULL; char * addr_str= tfe_stream_addr_to_str(addr); tfe_stream_addr_str_split(addr_str, &sip, &sport, &dip, &dport); - key_len=snprintf(key_buff, sz, "%s:%d:%d:%s:%s:", sip, + key_len=snprintf(key_buff, sz, "%s:%d:%d:%s:%s", sip, chello->min_version.ossl_format, chello->max_version.ossl_format, - chello->sni, chello->alpn?chello->alpn:"null"); + chello->sni?chello->sni: dip , + chello->alpn?chello->alpn:"null"); if(chello->cipher_suites && sz-key_len>chello->cipher_suites_len) { memcpy(key_buff+key_len, chello->cipher_suites, chello->cipher_suites_len); diff --git a/platform/src/ssl_sess_cache.cpp b/platform/src/ssl_sess_cache.cpp index ca29834..e29fa3b 100644 --- a/platform/src/ssl_sess_cache.cpp +++ b/platform/src/ssl_sess_cache.cpp @@ -183,7 +183,7 @@ static size_t upsess_mk_key(struct sockaddr * res, socklen_t addrlen, const char break; } - key_size=asprintf((char**)key_buf,"%s:%u:%s",s, port, sni); + key_size=asprintf((char**)key_buf,"%s:%u:%s",s, port, sni?sni:"null"); free(s); return key_size; } diff --git a/platform/src/ssl_stream.cpp b/platform/src/ssl_stream.cpp index 4b6b3df..e8c9957 100644 --- a/platform/src/ssl_stream.cpp +++ b/platform/src/ssl_stream.cpp @@ -214,8 +214,8 @@ struct ssl_stream uint64_t connect_latency_ms; struct ssl_stream* peer; - socklen_t addrlen; - struct sockaddr_storage addr; + socklen_t peer_addrlen; + struct sockaddr_storage peer_addr; struct __ssl_stream_debug _do_not_use; enum ssl_stream_error error; }; @@ -500,7 +500,7 @@ struct ssl_stream * ssl_stream_new(struct ssl_mgr * mgr, evutil_socket_t fd, enu s_stream->ssl_min_version=mgr->ssl_min_version; s_stream->peer=peer; s_stream->tcp_stream=tcp_stream; - ret = getpeername(fd, (struct sockaddr *) (&s_stream->addr), &(s_stream->addrlen)); + ret = getpeername(fd, (struct sockaddr *) (&s_stream->peer_addr), &(s_stream->peer_addrlen)); switch (dir) { case CONN_DIR_DOWNSTREAM: @@ -935,7 +935,7 @@ static void upstream_ossl_init(struct ssl_stream* s_stream) SSL_CTX_set_session_cache_mode(sslctx, SSL_SESS_CACHE_NO_INTERNAL); /* session resuming based on remote endpoint address and port */ sess = up_session_get(mgr->up_sess_cache, - (struct sockaddr *) &(s_stream->addr), s_stream->addrlen, chello->sni, + (struct sockaddr *) &(s_stream->peer_addr), s_stream->peer_addrlen, chello->sni, s_stream->ssl_min_version, s_stream->ssl_max_version); if (sess) { @@ -1223,7 +1223,6 @@ static void ssl_server_connected_eventcb(struct bufferevent * bev, short events, struct ssl_mgr* mgr=s_stream->mgr; SSL_SESSION * ssl_sess = NULL; char error_str[TFE_STRING_MAX]; - const char* sni=s_upstream->client_hello->sni?s_upstream->client_hello->sni:"null"; uint64_t jiffies_ms; unsigned long sslerr=0; if (events & BEV_EVENT_ERROR) @@ -1254,7 +1253,10 @@ static void ssl_server_connected_eventcb(struct bufferevent * bev, short events, jiffies_ms=(ctx->end.tv_sec-ctx->start.tv_sec)*1000+(ctx->end.tv_nsec-ctx->start.tv_nsec)/1000000; if(jiffies_ms>LATENCY_WARNING_THRESHOLD_MS) { - TFE_LOG_ERROR(mgr->logger, "Warning: ssl connect server latency %ld ms: addr=%s, sni=%s", jiffies_ms, s_stream->tcp_stream->str_stream_info, sni); + TFE_LOG_ERROR(mgr->logger, "Warning: ssl connect server latency %ld ms: addr=%s, sni=%s", + jiffies_ms, + s_stream->tcp_stream->str_stream_info, + s_upstream->client_hello->sni); } s_stream->connect_latency_ms=jiffies_ms; ssl_stream_set_cmsg_integer(s_stream, TFE_CMSG_SSL_SERVER_SIDE_LATENCY, jiffies_ms); @@ -1338,7 +1340,7 @@ static void ssl_server_connected_eventcb(struct bufferevent * bev, short events, if(s_stream->error) { ssl_stream_set_cmsg_string(s_stream, TFE_CMSG_SSL_ERROR, ssl_stream_get_error_string(s_stream->error)); - snprintf(error_str, sizeof(error_str), "%s, sni=%s", ssl_stream_get_error_string(s_stream->error), sni); + snprintf(error_str, sizeof(error_str), "%s, sni=%s", ssl_stream_get_error_string(s_stream->error), s_upstream->client_hello->sni); promise_failed(p, FUTURE_ERROR_EXCEPTION, error_str); } wrap_ssl_connect_server_ctx_free(ctx); @@ -1699,7 +1701,7 @@ void downstream_ossl_init(struct ssl_stream *s_stream) SSL_CTX_sess_set_new_cb(sslctx, ossl_downsess_new_cb); SSL_CTX_sess_set_remove_cb(sslctx, ossl_downsess_remove_cb); SSL_CTX_sess_set_get_cb(sslctx, ossl_downsess_get_cb); - if(!mgr->no_sessticket) + if(!mgr->no_sessticket&&s_stream->peer->up_parts.client_hello->sni) { SSL_CTX_set_tlsext_ticket_key_cb(sslctx, ossl_session_ticket_key_callback); } @@ -1812,7 +1814,6 @@ static void ssl_client_connected_eventcb(struct bufferevent * bev, short events, struct ssl_stream * s_stream = ctx->downstream; struct ssl_upstream_parts* s_upstream= &(ctx->peer->up_parts); struct ssl_mgr* mgr=s_stream->mgr; - const char* sni=s_upstream->client_hello->sni?s_upstream->client_hello->sni:"null"; char error_str[TFE_STRING_MAX]={0}; uint64_t jiffies_ms=0; unsigned long sslerr=0; @@ -1843,7 +1844,10 @@ static void ssl_client_connected_eventcb(struct bufferevent * bev, short events, jiffies_ms=(ctx->end.tv_sec-ctx->start.tv_sec)*1000+(ctx->end.tv_nsec-ctx->start.tv_nsec)/1000000; if(jiffies_ms>LATENCY_WARNING_THRESHOLD_MS) { - TFE_LOG_ERROR(mgr->logger, "Warning: ssl connect client latency %ld ms: addr=%s, sni=%s", jiffies_ms, s_stream->tcp_stream->str_stream_info, sni); + TFE_LOG_ERROR(mgr->logger, "Warning: ssl connect client latency %ld ms: addr=%s, sni=%s", + jiffies_ms, + s_stream->tcp_stream->str_stream_info, + s_upstream->client_hello->sni); } s_stream->connect_latency_ms=jiffies_ms; ssl_stream_set_cmsg_integer(s_stream, TFE_CMSG_SSL_CLIENT_SIDE_LATENCY, jiffies_ms); @@ -1862,7 +1866,7 @@ static void ssl_client_connected_eventcb(struct bufferevent * bev, short events, if(s_stream->error) { ssl_stream_set_cmsg_string(s_stream, TFE_CMSG_SSL_ERROR, ssl_stream_get_error_string(s_stream->error)); - snprintf(error_str, sizeof(error_str), "%s : sni=%s", ssl_stream_get_error_string(s_stream->error), sni); + snprintf(error_str, sizeof(error_str), "%s : sni=%s", ssl_stream_get_error_string(s_stream->error), s_upstream->client_hello->sni); promise_failed(p, FUTURE_ERROR_EXCEPTION, error_str); }