# Fighting TLS fingerprinting with Node.js

DevFeed: [Fighting TLS fingerprinting with Node.js](<https://devfeed.tech/articles/fighting-tls-fingerprinting-with-node-js-19098.md>)

Original publisher: [Read original article](<https://httptoolkit.com/blog/tls-fingerprinting-node-js/>)

Author: HTTP Toolkit; Tim Perry

Published: 2021-12-07T13:40:00Z

Content type: tutorial

Language: en

Sources: [HTTP Toolkit](<https://devfeed.tech/sources/http-toolkit.md>)

Topics: [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [http](<https://devfeed.tech/tags/http.md>), [interception](<https://devfeed.tech/tags/interception.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [mitm](<https://devfeed.tech/tags/mitm.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [proxy](<https://devfeed.tech/tags/proxy.md>), [tls](<https://devfeed.tech/tags/tls.md>)

## AI overview

This tutorial explains how TLS fingerprinting lets servers and proxies identify client software from unencrypted connection metadata. It examines how this can block HTTP Toolkit and other automated traffic, then shows how Node.js techniques can work around that blocking.

## Source excerpt

The modern internet is full of services that want to know who you are. Fingerprinting is the latest way to do this: capturing many small details about your client, and using it to create an id that's sufficiently unique to recognize you and infer details about your network client and device. This is a privacy problem, which I'm not going to focus on here, but collecting and analysing interaction metadata is also a powerful tool to recognize certain types of clients, even when they attempt to disguise themselves. TLS provides a particularly good surface for this kind of fingerprinting, which allows a server or proxy to recognize the kind of software (a specific browser version, Python, Ruby, Node.js, etc) that's opening any TLS connection, before the client has even sent any data (such as an HTTP request) within the connection, and purely using unencrypted public data from the connection. In many cases, this is a problem. HTTP Toolkit acts as a MitM proxy for HTTP(S) traffic inspection & mocking, and this potentially allows servers to recognize and block it, along with any other similar debugging proxies. Many other automated scripts and tools can also be recognized, blocking web scraping and other requests from anything but a real browser. Until recently, I thought this was fairly theoretical, but last week an HTTP Toolkit user showed me a real-world example, where non-browser traffic is blocked completely, based just on its TLS fingerprint, causing big problems for HTTP Toolkit usage. Fortunately, we can work around this. In this article, I want to explain how TLS fingerprinting works, look at a real-world example, and then see exactly how you can defeat this blocking using Node.js (with techniques that you can easily apply elsewhere too). How does TLS fingerprinting work? TLS provides a huge amount of data for fingerprinting. Every connection secured by TLS (for example, all HTTPS requests) starts with a 'client hello' message from the client, sent unencrypted, wi