SocksClient.createConnection vrne tok, povezan z zahtevanim ciljem. Pri HTTPS ta tok še vedno potrebuje rokovanje TLS, preden prenese zahtevo HTTP.

import { SocksClient } from 'socks';
import tls from 'node:tls';

const targetHost = 'service.example';
const info = await SocksClient.createConnection({
  proxy: { host: 'proxy.example', port: 1080, type: 5 },
  command: 'connect',
  destination: { host: targetHost, port: 443 },
  timeout: 10000,
});
const secure = tls.connect({
  socket: info.socket,
  servername: targetHost,
});
secure.on('error', onTransportError);
secure.on('data', onResponseBytes);
secure.once('secureConnect', () => {
  secure.write(
    `GET /data HTTP/1.1\r\nHost: ${targetHost}\r\nConnection: close\r\n\r\n`
  );
});

Seznam proxyjev SOCKS5 zagotavlja kandidate za gostitelja in vrata proxyja. onTransportError in onResponseBytes pripadata obstoječi aplikaciji; drugo mora razčleniti tok odgovora HTTP. Deli podatkov TLS niso samostojno popolna sporočila HTTP.

servername je ime DNS cilja. Nizkonivojski tls.connect v Node privzeto ne omogoči SNI, ime gostitelja proxyja pa ni identiteta potrdila spletnega mesta.

Pustite preverjanje potrdila omogočeno. Če posredujete povezano vtičnico, se izognete odpiranju ločene neposredne povezave s spletnim mestom in ohranite njegovo identiteto TLS.

Časovna omejitev SOCKS omejuje to pogajanje. Kasnejša izmenjava TLS in aplikacije še vedno potrebuje predvideno časovno omejitev, preklic in politiko čiščenja klicatelja.

Sorodni članki