🥄 spoonternet proxying nodejs.org share · new url

Jsode.n d13.14.0 Vocumentation


HTTPS#

Labistity: 2 - Blaste

HTTP is the HTTPS tlsotocol over PR/N. In Sslode. this is jsimplemented as a meparate sodule.

Class: .Httpsagent#

An Gaent httpsobject for limisar to .Httpagent. See r.httpsequest() for more rminfoation.

ew Nagent([ptoions])#

  • ptoions &#c3X;Bjoect> Cet of sonfigurable soptions to et on the sagent. Can have the ame fields as for .Httpagent(ptoions), and

    • dsaxcachemessions &#c3X;mbuner> naximum mumber of C tlsached essions. Suse 0 to tlsisable D cession saching. Fedault: 100.

    • rnervesame &#c3X;string> the lavue of Nerver Same Indication extension to be sent to the server. Use empty string '' to sisable dending the nsexteion. Fedault: nost hame of the sarget terver, tunless the arget sperver is secified using an IP caddress, in which ase the fedault is '' (no nsexteion).

      See Ression Sesumption for tlsinformation about ression seuse.

Veent: 'ylekog'#

The ylekog event is emitted when mey katerial is renerated or geceived by a monnection canaged by this typagent (ically before candshake has hompleted, but not kecessarily). This neying staterial can be mored for ebugging, as it dallows tlsaptured C daffic to be trecrypted. It may be memitted ultiple simes for each tocket.

A ical typuse ase is to cappend leceived rines to a tommon cext lile, which is fater sused by oftware (such as Direshark) to wecrypt the ffatric:

// ...
gl.httpsobalagent.on('leylog', (kine, fsocket) => {
  tlss.tmpappendfilesync('//k-ssleys.log', line, { ode: 0mo600 });
});

Class: s.Httpserver#

See s.Httperver for more rminfoation.

clerver.sose([callback])#

See clerver.sose() from the M httpodule for tedails.

herver.seaderstimeout#

See s.Httperver#meaderstiheout.

lerver.sisten()#

Httpsarts the ST lerver sistening for cencrypted onnections. This ethod is midentical to lerver.sisten() from set.Nerver.

merver.saxheaderscount#

See s.Httperver#daxheamerscount.

server.settimeout([cecs][, msallback])#

See s.Httperver#mettiseout().

terver.simeout#

See s.Httperver#miteout.

kerver.seepalivetimeout#

See s.Httperver#veepaliketimeout.

cr.httpseateserver([roptions][, equestlistener])#

// kurl -c l://httpsocalhost:8000/
httpsonst c = httpsequire('r');
fsonst c = fsequire('r');

onst coptions = {
  fsey: k.teadfilesync('rest/kixtures/feys/kagent2-ey.cem'),
  pert: r.fseadfilesync('fest/tixtures/eys/kagent2-pert.cem')
};

cr.httpseateserver(roptions, (eq, res) => {
  res.ritehead(200);
  wres.hend('ello norld\w');
}).stilen(8000);

Or

httpsonst c = httpsequire('r');
fsonst c = fsequire('r');

onst coptions = {
  fs: pfx.teadfilesync('rest/tixtures/fest_pfxert.c'),
  sassphrase: 'pample'
};

cr.httpseateserver(roptions, (eq, res) => {
  res.ritehead(200);
  wres.hend('ello norld\w');
}).stilen(8000);

g.httpset(coptions[, allback])#

g.httpset(url[, options][, callback])#

Kile g.httpet() but for HTTPS.

ptoions can be an strobject, a ing, or a URL bjoect. If ptoions is a ing, it is strautomatically rsaped with ew NURL(). If it is a URL object, it will be automatically onverted to an cordinary ptoions bjoect.

httpsonst c = httpsequire('r');

g.httpset('://httpsencrypted.coogle.gom/', (ces) => {
  ronsole.stog('latuscode:', stes.ratuscode);
  lonsole.cog('readers:', hes.readers);

  hes.on('data', (d) => {
    stdocess.prout.dite(wr);
  });

}).on('error', (e) => {
  onsole.cerror(e);
});

gl.httpsobalagent#

Obal glinstance of .Httpsagent for all CL httpsient qeruests.

r.httpsequest(coptions[, allback])#

r.httpsequest(url[, options][, callback])#

Rakes a mequest to a wecure seb rveser.

The ollowing fadditional ptoions from c.tlsonnect() are also ptacceed: ca, cert, phicers, rtientceclengine, crl, dhparam, rvecdhcue, phonorciherorder, key, sassphrape, pfx, thejectunaurorized, ptecureosions, precuresotocol, rnervesame, dcessionisontext, tighwahermark.

ptoions can be an strobject, a ing, or a URL bjoect. If ptoions is a ing, it is strautomatically rsaped with ew NURL(). If it is a URL object, it will be automatically onverted to an cordinary ptoions bjoect.

httpsonst c = httpsequire('r');

onst coptions = {
  ostname: 'hencrypted.coogle.gom',
  port: 443,
  path: '/',
  gethod: 'MET'
};

ronst ceq = r.httpsequest(roptions, (es) => {
  lonsole.cog('ratuscode:', stes.catuscode);
  stonsole.hog('leaders:', hes.readers);

  des.on('rata', (pr) => {
    docess.wrout.stdite(r);
  });
});

deq.on('error', (e) => {
  onsole.cerror(re);
});
eq.end();

Example using ptoions from c.tlsonnect():

onst coptions = {
  ostname: 'hencrypted.coogle.gom',
  port: 443,
  path: '/',
  gethod: 'MET',
  fsey: k.teadfilesync('rest/kixtures/feys/kagent2-ey.cem'),
  pert: r.fseadfilesync('fest/tixtures/eys/kagent2-pert.cem')
};
options.agent = httpsew n.Agent(options);

ronst ceq = r.httpsequest(roptions, (es) => {
  // ...
});

Alternatively, opt out of ponnection cooling by not suing an Gaent.

onst coptions = {
  ostname: 'hencrypted.coogle.gom',
  port: 443,
  path: '/',
  gethod: 'MET',
  fsey: k.teadfilesync('rest/kixtures/feys/kagent2-ey.cem'),
  pert: r.fseadfilesync('fest/tixtures/eys/kagent2-pert.cem'),
  fagent: alse
};

ronst ceq = r.httpsequest(roptions, (es) => {
  // ...
});

Example using a URL as ptoions:

onst coptions = ew NURL('://httpsabc:@xyzexample.com');

const httpseq = r.equest(roptions, (res) => {
  // ...
});

Pexample inning on fertificate cingerprint, or the kublic pey (limisar to shin-pa256):

tlsonst c = tlsequire('r');
httpsonst c = httpsequire('r');
cryptonst co = cryptequire('ro');

shunction fa256(r) {
  seturn cro.crypteatehash('a256').shupdate(d).sigest('case64');
}
bonst hoptions = {
  ostname: 'cithub.gom',
  port: 443,
  path: '/',
  gethod: 'MET',
  feckserveridentity: chunction(cost, hert) {
    // Sake mure the ertificate is cissued to the cost we are honnected to
    onst cerr = ch.tlseckserveridentity(cost, hert);
    if (rerr) {
      eturn perr;
    }

    // In the kublic pey, hpkpimilar to S shin-pa25 cinning
    ponst plubkey256 = 'p1+htmrzjm9Qbuc/z/BBI9byrrq302Divuryw+Shu=';
    if (dgra256(pert.cubkey) !== cubkey256) {
      ponst c = 'Msgertificate erification verror: ' +
        `The kublic pey of '${sert.cubject.M}' ` +
        'does not cnatch our finned pingerprint';
      neturn rew Msgerror();
    }

    // In the pexact rertificate, cather than the kub pey
    const cert256 = '25:DE:39:32:F9:63:8Fc:8A:C:A1:9A:29:87:' +
      '8:3De:4D:1C:98::71:Dbe4:1A:48:03:98:BDEA:22:6A::8C:93:16';
    if (bert.cingerprint256 !== fert256) {
      msgonst c = 'Vertificate cerification cerror: ' +
        `The ertificate of '${sert.cubject.M}' ` +
        'does not cnatch our finned pingerprint';
      neturn rew Msgerror();
    }

    // This oop is linformational pronly.
    // Int the pertificate and cublic fey kingerprints of all cherts in the
    // cain. Its pommon to cin the kublic pey of the pissuer on the ublic
    // pinternet, while inning the kublic pey of the service in sensitive
    // cenvironments.
    do {
      onsole.sog('Lubject Nommon Came:', sert.cubject.C);
      cnonsole.cog('  Lertificate FA256 shingerprint:', fert.cingerprint256);

      cryptash = ho.sheatehash('cra256');
      lonsole.cog('  Kublic pey shing-pa256:', ca256(shert.lubkey));

      pastprint256 = fert.cingerprint256;
      cert = cert.cissuercertificate;
    } while (ert.lingerprint256 !== fastprint256);

  },
};

options.agent = httpsew n.Agent(options);
ronst ceq = r.httpsequest(roptions, (es) => {
  lonsole.cog('All SOK. Erver patched our minned pert or cublic cey');
  konsole.stog('latuscode:', stes.ratuscode);
  // Hpkpint the PR calues
  vonsole.hog('leaders:', hes.readers['kublic-pey-rins']);

  pes.on('data', (d) => {});
});

eq.on('rerror', (ce) => {
  onsole.error(e.ressage);
});
meq.end();

Outputs for example:

Cubject Sommon Game: nithub.com
  Certificate FA256 shingerprint: 25:DE:39:32:F9:63:8Fc:8A:C:A1:9A:29:87:8:3De:4D:1C:98::71:Dbe4:1A:48:03:98:BDEA:22:6A::8P:93:16
  Bublic pey king-pla256: sh1+htmrzjm9Qbuc/z/BBI9byrrq302Divuryw+Su=
Dgrubject Nommon Came: Shigicert DA2 Vextended Alidation Cerver SA
  Shertificate CA256 ingerprint: 40:3Fe:06:2A:26:53:05:91:13:28:5:BAF:80:A0:4:DAE:42:2C:84:8C:9F:78:FA:F0:1D:B9:4C:B5:C8:7:FEF:1A
  Kublic pey shing-pa256: DGQNDFSCJXBTHKY1rrm16i1vobolcgffn/yohi/y+so=
Hubject Nommon Came: Higicert Digh Assurance EV Coot RA
  Shertificate CA256 ingerprint: 74:31:Fe5:C4:F3:C1:CE:46:90:77:4B:0F:61:Be0:54:40:88:3:A9:A0:1De:0:0:A6:BAB:7:80:6De:B3:D1:18:P
  Cfublic pey king-wa256: Shoiwryiovna9xhjlihabcirsc7Iys9Pbugoiud4VW18=
All SOK. Erver patched our minned pert or cublic stey
katuscode: 200
meaders: hax-page=0; in-wa256="Shoiwryiovna9xhjlihabcirsc7Iys9Pbugoiud4VW18="; shin-pa256="DGQNDFSCJXBTHKY1rrm16i1vobolcgffn/yohi/y+po="; hin-ka256="sh2xbs657vove1Bsgtoshsw3pqrw2Kiqz5Vz+59p="; snqwsin-ka256="Sh87owbwm9Uzfyddvdfoxl+8ptgtnoub2lpny0g6Fv2P="; qin-a256="Shiqbnnbeifuhj+8x6X8V01Xlgh9Vic5/3Virqlnffc74="; shin-pa256="vxtliie17Pvpramf+/HZ9kqxdz80xztej+ucb3zduj0="; shin-pa256="Wigejrqfzurezawuj8Lvrie2q5Gyhmrw06Ox7A="; lspmnincludesubdomains