]> git.kaiwu.me - nginx.git/commitdiff
Stream ssl_preread: added SSLv2 Client Hello support.
authorSergey Kandaurov <pluknet@nginx.com>
Wed, 18 Jul 2018 15:51:25 +0000 (18:51 +0300)
committerSergey Kandaurov <pluknet@nginx.com>
Wed, 18 Jul 2018 15:51:25 +0000 (18:51 +0300)
In particular, it was not possible to obtain SSLv2 protocol version.

src/stream/ngx_stream_ssl_preread_module.c

index 8deb72554d5deafbc9c201e844a39a35911e68e3..a236fc5551dd6c54d2f692ec5f08617a67535b4d 100644 (file)
@@ -149,6 +149,14 @@ ngx_stream_ssl_preread_handler(ngx_stream_session_t *s)
 
     while (last - p >= 5) {
 
+        if ((p[0] & 0x80) && p[2] == 1 && (p[3] == 0 || p[3] == 3)) {
+            ngx_log_debug0(NGX_LOG_DEBUG_STREAM, ctx->log, 0,
+                           "ssl preread: version 2 ClientHello");
+            ctx->version[0] = p[3];
+            ctx->version[1] = p[4];
+            return NGX_OK;
+        }
+
         if (p[0] != 0x16) {
             ngx_log_debug0(NGX_LOG_DEBUG_STREAM, ctx->log, 0,
                            "ssl preread: not a handshake");
@@ -507,8 +515,12 @@ ngx_stream_ssl_preread_protocol_variable(ngx_stream_session_t *s,
     ngx_str_null(&version);
 
     switch (ctx->version[0]) {
-    case 2:
-        ngx_str_set(&version, "SSLv2");
+    case 0:
+        switch (ctx->version[1]) {
+        case 2:
+            ngx_str_set(&version, "SSLv2");
+            break;
+        }
         break;
     case 3:
         switch (ctx->version[1]) {