diff --git a/.gitignore b/.gitignore index 3c1a8ec..d5f6b35 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ *~ *.orig *.rej -*.patch # Build files /objs diff --git a/strict-sni-example.patch b/strict-sni-example.patch new file mode 100644 index 0000000..48f1bfe --- /dev/null +++ b/strict-sni-example.patch @@ -0,0 +1,47 @@ +diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c +index 98cc8c7..0810526 100644 +--- a/src/http/ngx_http_request.c ++++ b/src/http/ngx_http_request.c +@@ -849,7 +849,7 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg) + servername = SSL_get_servername(ssl_conn, TLSEXT_NAMETYPE_host_name); + + if (servername == NULL) { +- return SSL_TLSEXT_ERR_NOACK; ++ return SSL_TLSEXT_ERR_ALERT_FATAL; + } + + c = ngx_ssl_get_connection(ssl_conn); +@@ -864,7 +864,7 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg) + host.len = ngx_strlen(servername); + + if (host.len == 0) { +- return SSL_TLSEXT_ERR_NOACK; ++ return SSL_TLSEXT_ERR_ALERT_FATAL; + } + + host.data = (u_char *) servername; +@@ -879,7 +879,7 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg) + NULL, &cscf) + != NGX_OK) + { +- return SSL_TLSEXT_ERR_NOACK; ++ return SSL_TLSEXT_ERR_ALERT_FATAL; + } + + hc->ssl_servername = ngx_palloc(c->pool, sizeof(ngx_str_t)); +diff --git a/lib/openssl/ssl/statem/extensions.c b/lib/openssl/ssl/statem/extensions.c +index 8422161dc1..675446e59f 100644 +--- a/lib/openssl/ssl/statem/extensions.c ++++ b/lib/openssl/ssl/statem/extensions.c +@@ -998,7 +998,9 @@ static int final_server_name(SSL *s, unsigned int context, int sent) + + switch (ret) { + case SSL_TLSEXT_ERR_ALERT_FATAL: +- SSLfatal(s, altmp, SSL_F_FINAL_SERVER_NAME, SSL_R_CALLBACK_FAILED); ++ s->statem.in_init = 1; ++ s->statem.state = MSG_FLOW_ERROR; ++ ssl3_send_alert(s, SSL3_AL_FATAL, altmp); + return 0; + + case SSL_TLSEXT_ERR_ALERT_WARNING: +