@@ -283,4 +283,47 @@ describe("Read-TLS-Fingerprint", () => {
283
283
expect ( response . statusCode ) . to . equal ( 200 ) ;
284
284
} ) ;
285
285
286
+ it ( "can read a TLS v1 fingerprint" , async function ( ) {
287
+ if ( nodeMajorVersion >= 17 ) this . skip ( ) ; // New Node doesn't support this
288
+
289
+ server = makeDestroyable ( new net . Server ( ) ) ;
290
+
291
+ server . listen ( ) ;
292
+ await new Promise ( ( resolve ) => server . on ( 'listening' , resolve ) ) ;
293
+
294
+ let incomingSocketPromise = getDeferred < net . Socket > ( ) ;
295
+ server . on ( 'connection' , ( socket ) => incomingSocketPromise . resolve ( socket ) ) ;
296
+
297
+ const port = ( server . address ( ) as net . AddressInfo ) . port ;
298
+ tls . connect ( {
299
+ host : 'localhost' ,
300
+ port,
301
+ maxVersion : 'TLSv1' , // <-- Force old TLS
302
+ minVersion : 'TLSv1'
303
+ } ) . on ( 'error' , ( ) => { } ) ; // Socket will fail, since server never responds, that's OK
304
+
305
+ const incomingSocket = await incomingSocketPromise ;
306
+ const fingerprint = await getTlsFingerprintData ( incomingSocket ) ;
307
+
308
+ const [
309
+ tlsVersion ,
310
+ ciphers ,
311
+ extension ,
312
+ groups ,
313
+ curveFormats
314
+ ] = fingerprint ;
315
+
316
+ expect ( tlsVersion ) . to . equal ( 769 ) ; // TLS 1!
317
+ expect ( ciphers . slice ( 0 , 3 ) ) . to . deep . equal ( [ 49162 , 49172 , 57 ] ) ;
318
+ expect ( extension ) . to . deep . equal ( [
319
+ 11 ,
320
+ 10 ,
321
+ 35 ,
322
+ 22 ,
323
+ 23
324
+ ] ) ;
325
+ expect ( groups ) . to . deep . equal ( [ 29 , 23 , 30 , 25 , 24 ] ) ;
326
+ expect ( curveFormats ) . to . deep . equal ( [ 0 , 1 , 2 ] ) ;
327
+ } ) ;
328
+
286
329
} ) ;
0 commit comments