Skip to content

Commit a32fbcd

Browse files
authoredJan 18, 2025
Merge pull request #592 from droe/droe/fix-ja4-ssl2
Fix wrong SSL 2.0 version and remove SSL 1.0 (bug in older JA4 spec)
2 parents 9b2da1f + a4fbb56 commit a32fbcd

File tree

5 files changed

+13
-25
lines changed

5 files changed

+13
-25
lines changed
 

‎src/libnfdump/filter/grammar.y

+1-1
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,7 @@ static int AddPayloadSSL(char *type, char *arg, char *opt) {
13041304
yyprintf("String %s is not a valid SSL/TLS version", opt);
13051305
return -1;
13061306
}
1307-
// if old SSL 1.0, 2.0 or 3.0
1307+
// if old SSL 2.0 or 3.0
13081308
if (major > 1 && minor > 0){
13091309
yyprintf("String %s is not a valid SSL/TLS version", opt);
13101310
return -1;

‎src/libnfdump/ssl/ssl.c

+9-18
Original file line numberDiff line numberDiff line change
@@ -250,19 +250,13 @@ static int sslParseClientHandshake(ssl_t *ssl, BytesStream_t sslStream, uint32_t
250250
0x0302 = TLS 1.1 = “11”
251251
0x0301 = TLS 1.0 = “10”
252252
0x0300 = SSL 3.0 = “s3”
253-
0x0200 = SSL 2.0 = “s2”
254-
0x0100 = SSL 1.0 = “s1”
253+
0x0002 = SSL 2.0 = “s2”
255254
256255
Unknown = “00”
257256
*/
258257
ssl->protocolVersion = version;
259258
switch (version) {
260-
case 0x0100:
261-
// SSL 1.0 was never really release!
262-
ssl->tlsCharVersion[0] = 's';
263-
ssl->tlsCharVersion[1] = '1';
264-
break;
265-
case 0x0200: // SSL 2.0
259+
case 0x0002: // SSL 2.0
266260
ssl->tlsCharVersion[0] = 's';
267261
ssl->tlsCharVersion[1] = '2';
268262
break;
@@ -287,8 +281,8 @@ static int sslParseClientHandshake(ssl_t *ssl, BytesStream_t sslStream, uint32_t
287281
ssl->tlsCharVersion[1] = '3';
288282
break;
289283
default:
290-
LogError("%s():%d Not an SSL 3.0 - TLS 1.3 protocol", __FUNCTION__, __LINE__);
291-
dbg_printf("Client handshake: Not an SSL 3.0 - TLS 1.3 protocol\n");
284+
LogError("%s():%d Not an SSL 2.0 - TLS 1.3 protocol", __FUNCTION__, __LINE__);
285+
dbg_printf("Client handshake: Not an SSL 2.0 - TLS 1.3 protocol\n");
292286
return 0;
293287
}
294288

@@ -347,10 +341,7 @@ static int sslParseServerHandshake(ssl_t *ssl, BytesStream_t sslStream, uint32_t
347341

348342
ssl->protocolVersion = version;
349343
switch (version) {
350-
case 0x0100:
351-
// SSL 1.0 was never really release!
352-
break;
353-
case 0x0200: // SSL 2.0
344+
case 0x0002: // SSL 2.0
354345
ssl->tlsCharVersion[0] = 's';
355346
ssl->tlsCharVersion[1] = '2';
356347
break;
@@ -371,8 +362,8 @@ static int sslParseServerHandshake(ssl_t *ssl, BytesStream_t sslStream, uint32_t
371362
ssl->tlsCharVersion[1] = '3';
372363
break;
373364
default:
374-
LogError("%s():%d Not an SSL 3.0 - TLS 1.3 protocol", __FUNCTION__, __LINE__);
375-
dbg_printf("Client handshake: Not an SSL 3.0 - TLS 1.3 protocol\n");
365+
LogError("%s():%d Not an SSL 2.0 - TLS 1.3 protocol", __FUNCTION__, __LINE__);
366+
dbg_printf("Client handshake: Not an SSL 2.0 - TLS 1.3 protocol\n");
376367
return 0;
377368
}
378369

@@ -516,14 +507,14 @@ ssl_t *sslProcess(const uint8_t *data, size_t len) {
516507
uint16_t sslVersion;
517508
ByteStream_GET_u16(sslStream, sslVersion);
518509
switch (sslVersion) {
519-
case 0x0200: // SSL 2.0
510+
case 0x0002: // SSL 2.0
520511
case 0x0300: // SSL 3.0
521512
case 0x0301: // TLS 1.1
522513
case 0x0302: // TLS 1.2
523514
case 0x0303: // TLS 1.3
524515
break;
525516
default:
526-
dbg_printf("SSL version: 0x%x not SSL 3.0 - TLS 1.3 connection\n", sslVersion);
517+
dbg_printf("SSL version: 0x%x not SSL 2.0 - TLS 1.3 connection\n", sslVersion);
527518
return NULL;
528519
}
529520

‎src/libnfdump/ssl/ssl.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ typedef struct ssl_s {
8181
0x0302 = TLS 1.1 = “11”
8282
0x0301 = TLS 1.0 = “10”
8383
0x0300 = SSL 3.0 = “s3”
84-
0x0200 = SSL 2.0 = “s2”
85-
0x0100 = SSL 1.0 = “s1”
84+
0x0002 = SSL 2.0 = “s2”
8685
Unknown = “00”
8786
*/
8887

‎src/output/output_csv.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -1161,8 +1161,7 @@ static char *String_tlsVersion(char *streamPtr, recordHandle_t *recordHandle) {
11611161
0x0302 = TLS 1.1 = “11”
11621162
0x0301 = TLS 1.0 = “10”
11631163
0x0300 = SSL 3.0 = “s3”
1164-
0x0200 = SSL 2.0 = “s2”
1165-
0x0100 = SSL 1.0 = “s1”
1164+
0x0002 = SSL 2.0 = “s2”
11661165
*/
11671166

11681167
// ssl is defined

‎src/output/output_fmt.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -1212,8 +1212,7 @@ static void String_tlsVersion(FILE *stream, recordHandle_t *recordHandle) {
12121212
0x0302 = TLS 1.1 = “11”
12131213
0x0301 = TLS 1.0 = “10”
12141214
0x0300 = SSL 3.0 = “s3”
1215-
0x0200 = SSL 2.0 = “s2”
1216-
0x0100 = SSL 1.0 = “s1”
1215+
0x0002 = SSL 2.0 = “s2”
12171216
*/
12181217

12191218
// ssl is defined

0 commit comments

Comments
 (0)