Skip to content

Commit

Permalink
Reapply "Load custom certificates (#108)"
Browse files Browse the repository at this point in the history
This reverts commit 3fdeed8.
  • Loading branch information
mustard-mh committed Jul 18, 2024
1 parent 3fdeed8 commit 116e4a6
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 2 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@
"@bufbuild/buf": "^1.15.0-1",
"@types/google-protobuf": "^3.7.4",
"@types/js-yaml": "^4.0.5",
"@types/http-proxy-agent": "^2.0.1",
"@types/mocha": "^9.1.1",
"@types/node": "18.x",
"@types/proper-lockfile": "^4.1.2",
Expand Down Expand Up @@ -443,6 +444,7 @@
"@microsoft/dev-tunnels-ssh-keys": "^3.11.38",
"@microsoft/dev-tunnels-ssh-tcp": "^3.11.38",
"@segment/analytics-node": "^1.0.0-beta.24",
"@vscode/proxy-agent": "^0.21.0",
"configcat-node": "^8.0.0",
"js-yaml": "^4.1.0",
"long": "^5.2.1",
Expand Down
38 changes: 38 additions & 0 deletions src/local-ssh/proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import * as os from 'os';
import * as path from 'path';
import * as fs from 'fs';
import * as tls from 'tls';
import { NopeLogger, DebugLogger } from './logger';
import { TelemetryService } from './telemetryService';
import { createTlsPatch, loadSystemCertificates, LogLevel, ProxyAgentParams } from '@vscode/proxy-agent';

interface ClientOptions {
host: string;
Expand Down Expand Up @@ -421,6 +423,9 @@ async function getExtensionsJson(extensionsDir: string) {

async function main() {
const logService = options.debug ? new DebugLogger(path.join(os.tmpdir(), `lssh-${options.host}.log`)) : new NopeLogger();

createPatchedModules(logService);

const telemetryService = new TelemetryService(
process.env.SEGMENT_KEY!,
options.machineID,
Expand Down Expand Up @@ -477,3 +482,36 @@ function getFailureCode(err: any) {
}
return undefined;
}

function createPatchedModules(logService: ILogService) {
if (process.platform === 'win32') {
// Ignore windows for now as it requires a native binary
return;
}

const params: ProxyAgentParams = {
resolveProxy: async () => undefined,
getProxyURL: () => undefined,
getProxySupport: () => 'off',
addCertificatesV1: () => false,
addCertificatesV2: () => true,
log: logService,
getLogLevel: () => {
return LogLevel.Trace;
},
proxyResolveTelemetry: () => { },
useHostProxy: false,
loadAdditionalCertificates: async () => {
return await loadSystemCertificates({ log: logService });
},
env: process.env,
};

function mergeModules(module: any, patch: any) {
return Object.assign(module.default || module, patch);
}

return {
tls: mergeModules(tls, createTlsPatch(params, tls))
};
}
6 changes: 4 additions & 2 deletions webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ const prodConfig = {
vscode: "commonjs vscode",
bufferutil: "bufferutil",
"utf-8-validate": "utf-8-validate",
"node-rsa": "node-rsa"
"node-rsa": "node-rsa",
"@vscode/windows-ca-certs": "@vscode/windows-ca-certs"
},
resolve: {
mainFields: ['main'],
Expand Down Expand Up @@ -80,7 +81,8 @@ const devConfig = {
externals: {
bufferutil: "bufferutil",
"utf-8-validate": "utf-8-validate",
"node-rsa": "node-rsa"
"node-rsa": "node-rsa",
"@vscode/windows-ca-certs": "@vscode/windows-ca-certs"
},
resolve: {
mainFields: ['main'],
Expand Down
101 changes: 101 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,11 @@
component-type "^1.2.1"
join-component "^1.1.0"

"@tootallnate/once@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-3.0.0.tgz#d52238c9052d746c9689523e650160e70786bc9a"
integrity sha512-OAdBVB7rlwvLD+DiecSAyVKzKVmSfXbouCyM5I6wHGi4MGXIyFqErg1IvyJ7PI1e+GYZuZh7cCHV/c4LA8SKMw==

"@types/eslint-scope@^3.7.3":
version "3.7.3"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224"
Expand All @@ -401,6 +406,13 @@
resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.6.tgz#674a69493ef2c849b95eafe69167ea59079eb504"
integrity sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==

"@types/http-proxy-agent@^2.0.1":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@types/http-proxy-agent/-/http-proxy-agent-2.0.2.tgz#942c1f35c7e1f0edd1b6ffae5d0f9051cfb32be1"
integrity sha512-2S6IuBRhqUnH1/AUx9k8KWtY3Esg4eqri946MnxTG5HwehF1S5mqLln8fcyMiuQkY72p2gH3W+rIPqp5li0LyQ==
dependencies:
"@types/node" "*"

"@types/js-yaml@^4.0.5":
version "4.0.5"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138"
Expand Down Expand Up @@ -617,6 +629,20 @@
resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==

"@vscode/proxy-agent@^0.21.0":
version "0.21.0"
resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.21.0.tgz#93c818b863ad20b42679032ecc1e3ecdc6306f12"
integrity sha512-9YcpBq+ZhMr3EQY/5ScyHc9kIIU/AcYOQn3DXq0N9tl81ViVsUvii3Fh+FAtD0YQ/qWtDfGxt8VCWZtuyh2D0g==
dependencies:
"@tootallnate/once" "^3.0.0"
agent-base "^7.0.1"
debug "^4.3.4"
http-proxy-agent "^7.0.0"
https-proxy-agent "^7.0.2"
socks-proxy-agent "^8.0.1"
optionalDependencies:
"@vscode/windows-ca-certs" "^0.3.1"

"@vscode/vsce@^2.18.0":
version "2.18.0"
resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.18.0.tgz#9f40bf8e7df084a36844b9dadf5c277265c9fbd6"
Expand Down Expand Up @@ -645,6 +671,13 @@
optionalDependencies:
keytar "^7.7.0"

"@vscode/windows-ca-certs@^0.3.1":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@vscode/windows-ca-certs/-/windows-ca-certs-0.3.1.tgz#35c88b2d2a52f7759bfb6878906c3d40421ec6a3"
integrity sha512-1B6hZAsqg125wuMsXiKIFkBgKx/J7YR4RT/ccYGkWAToPU9MVa40PRe+evLFUmLPH6NmPohEPlCzZLbqgvHCcQ==
dependencies:
node-addon-api "^3.0.2"

"@webassemblyjs/ast@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
Expand Down Expand Up @@ -833,6 +866,13 @@ agent-base@6:
dependencies:
debug "4"

agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
dependencies:
debug "^4.3.4"

ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
Expand Down Expand Up @@ -2263,6 +2303,14 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"

http-proxy-agent@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
dependencies:
agent-base "^7.1.0"
debug "^4.3.4"

https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
Expand All @@ -2271,6 +2319,14 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"

https-proxy-agent@^7.0.2:
version "7.0.5"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2"
integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
dependencies:
agent-base "^7.0.2"
debug "4"

human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
Expand Down Expand Up @@ -2342,6 +2398,14 @@ inversify@^5.1.1:
resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.1.1.tgz#6fbd668c591337404e005a1946bfe0d802c08730"
integrity sha512-j8grHGDzv1v+8T1sAQ+3boTCntFPfvxLCkNcxB1J8qA0lUN+fAlSyYd+RXKvaPRL4AGyPxViutBEJHNXOyUdFQ==

ip-address@^9.0.5:
version "9.0.5"
resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
dependencies:
jsbn "1.1.0"
sprintf-js "^1.1.3"

ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
Expand Down Expand Up @@ -2470,6 +2534,11 @@ js-yaml@^3.10.0:
argparse "^1.0.7"
esprima "^4.0.0"

jsbn@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==

jsdoctypeparser@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz#acfb936c26300d98f1405cb03e20b06748e512a8"
Expand Down Expand Up @@ -2874,6 +2943,11 @@ node-abi@^3.3.0:
dependencies:
semver "^7.3.5"

node-addon-api@^3.0.2:
version "3.2.1"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==

node-addon-api@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
Expand Down Expand Up @@ -3630,6 +3704,28 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==

smart-buffer@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==

socks-proxy-agent@^8.0.1:
version "8.0.4"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c"
integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==
dependencies:
agent-base "^7.1.1"
debug "^4.3.4"
socks "^2.8.3"

socks@^2.8.3:
version "2.8.3"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
dependencies:
ip-address "^9.0.5"
smart-buffer "^4.2.0"

source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
Expand Down Expand Up @@ -3668,6 +3764,11 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==

sprintf-js@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==

sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
Expand Down

0 comments on commit 116e4a6

Please sign in to comment.