@trillboards/edge-sdk 0.2.20 → 0.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/macos/scripts/setup-litertlm.sh +30 -0
- package/deploy/windows/e2e/test-enterprise-trust-store.ps1 +341 -0
- package/deploy/windows/setup-litertlm.ps1 +49 -1
- package/dist/AudienceAnalyzeClient.d.ts +32 -1
- package/dist/AudienceAnalyzeClient.d.ts.map +1 -1
- package/dist/AudienceAnalyzeClient.js +34 -5
- package/dist/AudienceAnalyzeClient.js.map +1 -1
- package/dist/CloudSensingManager.d.ts +40 -0
- package/dist/CloudSensingManager.d.ts.map +1 -1
- package/dist/CloudSensingManager.js +117 -1
- package/dist/CloudSensingManager.js.map +1 -1
- package/dist/EdgeAgent.js +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +60 -0
- package/dist/cli.js.map +1 -1
- package/dist/diagnose.d.ts +37 -4
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +155 -6
- package/dist/diagnose.js.map +1 -1
- package/dist/enterpriseNetwork.d.ts +130 -0
- package/dist/enterpriseNetwork.d.ts.map +1 -0
- package/dist/enterpriseNetwork.js +568 -0
- package/dist/enterpriseNetwork.js.map +1 -0
- package/dist/enterpriseProxy.d.ts +73 -0
- package/dist/enterpriseProxy.d.ts.map +1 -0
- package/dist/enterpriseProxy.js +406 -0
- package/dist/enterpriseProxy.js.map +1 -0
- package/dist/enterpriseTrust.d.ts +188 -0
- package/dist/enterpriseTrust.d.ts.map +1 -0
- package/dist/enterpriseTrust.js +615 -0
- package/dist/enterpriseTrust.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/localNetworkAccess.d.ts +166 -0
- package/dist/localNetworkAccess.d.ts.map +1 -0
- package/dist/localNetworkAccess.js +490 -0
- package/dist/localNetworkAccess.js.map +1 -0
- package/dist/sensingRunMode.d.ts +36 -0
- package/dist/sensingRunMode.d.ts.map +1 -1
- package/dist/sensingRunMode.js +78 -1
- package/dist/sensingRunMode.js.map +1 -1
- package/dist/transportFailure.d.ts +118 -0
- package/dist/transportFailure.d.ts.map +1 -0
- package/dist/transportFailure.js +267 -0
- package/dist/transportFailure.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TRUST_CACHE_TTL_MS = void 0;
|
|
37
|
+
exports.extractPemBlocks = extractPemBlocks;
|
|
38
|
+
exports.readWindowsTrustAnchors = readWindowsTrustAnchors;
|
|
39
|
+
exports.parseDeniedTrustSubjects = parseDeniedTrustSubjects;
|
|
40
|
+
exports.readMacTrustAnchors = readMacTrustAnchors;
|
|
41
|
+
exports.readLinuxTrustAnchors = readLinuxTrustAnchors;
|
|
42
|
+
exports.readNodeExtraCaCerts = readNodeExtraCaCerts;
|
|
43
|
+
exports.readPlatformTrustAnchors = readPlatformTrustAnchors;
|
|
44
|
+
exports.resolveTrustAnchors = resolveTrustAnchors;
|
|
45
|
+
exports.invalidateTrustAnchorCache = invalidateTrustAnchorCache;
|
|
46
|
+
exports.peekTrustAnchorCache = peekTrustAnchorCache;
|
|
47
|
+
exports.buildCaBundle = buildCaBundle;
|
|
48
|
+
exports.describeTrustAnchors = describeTrustAnchors;
|
|
49
|
+
exports.trustStoreInstallHint = trustStoreInstallHint;
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const os = __importStar(require("os"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const tls = __importStar(require("tls"));
|
|
54
|
+
const child_process_1 = require("child_process");
|
|
55
|
+
/**
|
|
56
|
+
* enterpriseTrust — read the MACHINE's trust decision, and add it to ours.
|
|
57
|
+
*
|
|
58
|
+
* WHY THIS EXISTS
|
|
59
|
+
* ---------------
|
|
60
|
+
* Retail and restaurant chains run TLS-inspecting proxies: every outbound
|
|
61
|
+
* HTTPS connection is terminated by an appliance which re-signs it with a
|
|
62
|
+
* private enterprise root. That root is installed on the machine, so every
|
|
63
|
+
* browser on it works. Node does NOT read the platform trust store — it ships
|
|
64
|
+
* its own Mozilla-derived list and consults nothing else — so the connector was
|
|
65
|
+
* the one thing on the machine that could not talk to us.
|
|
66
|
+
*
|
|
67
|
+
* The failure had the worst possible shape. On a fresh install `uv` died first
|
|
68
|
+
* and the installer aborted blaming local AI; on the REPAIR path (where uv and
|
|
69
|
+
* litert-lm are already present, `setup-litertlm.ps1`'s `Test-LitertLmCli`
|
|
70
|
+
* short-circuit) the install COMPLETED and the connector then silently could
|
|
71
|
+
* not reach the API — a background process, no window, on a machine the
|
|
72
|
+
* customer believes is working.
|
|
73
|
+
*
|
|
74
|
+
* WHAT THIS IS NOT
|
|
75
|
+
* ----------------
|
|
76
|
+
* It is not a way to skip verification. There is no `rejectUnauthorized:false`
|
|
77
|
+
* here or anywhere in this tree and there must never be one — a connector that
|
|
78
|
+
* accepts any certificate is strictly worse than one that cannot connect,
|
|
79
|
+
* because it fails silently and in the customer's favour-looking direction.
|
|
80
|
+
* What we do is ADD the roots the machine's owner has already chosen to trust.
|
|
81
|
+
* Node's bundled list is always kept as the base (see `buildCaBundle`), so this
|
|
82
|
+
* can only ever widen trust to what this machine already trusts, never narrow
|
|
83
|
+
* it and never bypass it.
|
|
84
|
+
*
|
|
85
|
+
* RUNTIME RESOLUTION, NOT AN INSTALL-TIME EXPORT
|
|
86
|
+
* ----------------------------------------------
|
|
87
|
+
* The other design on the table was to export the machine roots to a .pem at
|
|
88
|
+
* install time and point `NODE_EXTRA_CA_CERTS` at it from the launcher. That is
|
|
89
|
+
* cheaper and it is wrong, for a reason specific to this product:
|
|
90
|
+
*
|
|
91
|
+
* - The normal order of operations is domain-join, then install, then IT
|
|
92
|
+
* ROTATES the inspection root (annually, or the day the appliance is
|
|
93
|
+
* replaced). An exported bundle is a snapshot: at the next rotation the
|
|
94
|
+
* connector breaks again with the exact same silent symptom.
|
|
95
|
+
* - Nothing would re-export it. There is no auto-update on Windows
|
|
96
|
+
* (cctv-connector-windows-gtm-readiness.md §5 — `install-update.ps1` is the
|
|
97
|
+
* installer's own in-place upgrade path and nothing polls), so a stale
|
|
98
|
+
* bundle would sit on the machine until the customer manually re-downloaded
|
|
99
|
+
* 2.6 GB.
|
|
100
|
+
* - `NODE_EXTRA_CA_CERTS` is read ONCE at process start, so even a correct
|
|
101
|
+
* file cannot be picked up without a restart.
|
|
102
|
+
*
|
|
103
|
+
* So we read the store at runtime, cache it for `TRUST_CACHE_TTL_MS`, and
|
|
104
|
+
* invalidate eagerly the moment a certificate-verification failure is
|
|
105
|
+
* classified (`invalidateTrustAnchorCache`, called from the transport). A root
|
|
106
|
+
* installed by IT while the connector is running is therefore picked up on the
|
|
107
|
+
* next cadence tick without a restart, which is the behaviour an operator on
|
|
108
|
+
* the phone with IT actually needs.
|
|
109
|
+
*
|
|
110
|
+
* `NODE_EXTRA_CA_CERTS` is still honoured — see `readNodeExtraCaCerts`. That
|
|
111
|
+
* matters more than it looks: passing `ca:` to a request REPLACES Node's
|
|
112
|
+
* resolved CA set, which silently disables `NODE_EXTRA_CA_CERTS` for that
|
|
113
|
+
* request. An admin who had already worked around this bug with that variable
|
|
114
|
+
* would have had their workaround broken by the fix. We read it ourselves.
|
|
115
|
+
*/
|
|
116
|
+
/** How long a trust-store read is reused before being taken again. */
|
|
117
|
+
exports.TRUST_CACHE_TTL_MS = 30 * 60 * 1000;
|
|
118
|
+
/** Hard ceiling on the bytes we accept from a store reader, per source. */
|
|
119
|
+
const MAX_STORE_BYTES = 8 * 1024 * 1024;
|
|
120
|
+
/** Wall-clock budget for a store-reading subprocess. */
|
|
121
|
+
const STORE_READ_TIMEOUT_MS = 15000;
|
|
122
|
+
const PEM_BLOCK_RE = /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/g;
|
|
123
|
+
function defaultExec(cmd, args) {
|
|
124
|
+
return (0, child_process_1.spawnSync)(cmd, args, {
|
|
125
|
+
encoding: 'utf-8',
|
|
126
|
+
timeout: STORE_READ_TIMEOUT_MS,
|
|
127
|
+
maxBuffer: MAX_STORE_BYTES,
|
|
128
|
+
windowsHide: true,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function defaultReadFile(p) {
|
|
132
|
+
return fs.readFileSync(p, 'utf-8');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Pull the PEM blocks out of arbitrary text.
|
|
136
|
+
*
|
|
137
|
+
* Deliberately a scan and not a parse: `security find-certificate -p` and
|
|
138
|
+
* `/etc/ssl/certs/ca-certificates.crt` both interleave human-readable headers
|
|
139
|
+
* between blocks, and OpenSSL is happy to be handed the blocks alone.
|
|
140
|
+
*/
|
|
141
|
+
function extractPemBlocks(text) {
|
|
142
|
+
if (!text)
|
|
143
|
+
return [];
|
|
144
|
+
const matches = text.match(PEM_BLOCK_RE);
|
|
145
|
+
if (!matches)
|
|
146
|
+
return [];
|
|
147
|
+
// Normalise line endings so the same certificate read through PowerShell
|
|
148
|
+
// (CRLF) and through a file (LF) dedupes against itself.
|
|
149
|
+
return matches.map((m) => m.replace(/\r\n/g, '\n').trim());
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Windows: read the two stores an enterprise inspection root is deployed into.
|
|
153
|
+
*
|
|
154
|
+
* `LocalMachine\Root` is where a GPO-pushed "Trusted Root Certification
|
|
155
|
+
* Authorities" entry lands; `CurrentUser\Root` is where a per-user deployment
|
|
156
|
+
* lands (and is the only one writable without elevation, which the connector's
|
|
157
|
+
* per-user install means we cannot assume we have).
|
|
158
|
+
*
|
|
159
|
+
* Deliberately ONLY the `Root` stores, not `CA`/`AuthRoot`. Windows itself
|
|
160
|
+
* requires a chain to terminate at a `Root` entry, and OpenSSL treats every
|
|
161
|
+
* entry of `ca:` as a trust ANCHOR — so feeding it the intermediate store would
|
|
162
|
+
* make each intermediate independently trusted, which is a wider trust
|
|
163
|
+
* statement than the machine actually makes. Intermediates come off the wire
|
|
164
|
+
* from the inspecting proxy, as they do for every browser on the same box.
|
|
165
|
+
*
|
|
166
|
+
* `-Command` and not `-File`: execution policy governs script FILES, so a
|
|
167
|
+
* machine under a GPO `AllSigned` (the estate this whole change targets — see
|
|
168
|
+
* cctv-connector-windows-gtm-readiness.md §1) still runs this. That is the one
|
|
169
|
+
* property that makes reading the store possible on exactly the machines that
|
|
170
|
+
* need it.
|
|
171
|
+
*/
|
|
172
|
+
/** `[storeName, storeLocation]` pairs, as the .NET `X509Store` constructor takes them. */
|
|
173
|
+
const WINDOWS_TRUST_STORES = [
|
|
174
|
+
['Root', 'LocalMachine'],
|
|
175
|
+
['Root', 'CurrentUser'],
|
|
176
|
+
];
|
|
177
|
+
/**
|
|
178
|
+
* The script that dumps the Root stores.
|
|
179
|
+
*
|
|
180
|
+
* Two deliberate choices, both made after the first version returned ZERO
|
|
181
|
+
* certificates on a real `windows-latest` host and reported nothing about why:
|
|
182
|
+
*
|
|
183
|
+
* 1. **`X509Store` directly, not the `Cert:` provider.** The provider is a
|
|
184
|
+
* PowerShell module; the .NET class is the API underneath it and depends on
|
|
185
|
+
* nothing being loaded.
|
|
186
|
+
* 2. **One raw base64 line per certificate, PEM armour added in Node.** The
|
|
187
|
+
* first version asked PowerShell to emit whole PEM blocks, which needs the
|
|
188
|
+
* `Base64FormattingOptions.InsertLineBreaks` overload — a string-to-enum
|
|
189
|
+
* coercion inside a `-Command` string, i.e. exactly the kind of thing that
|
|
190
|
+
* fails quietly. Node can wrap 64-character lines with no ambiguity at all.
|
|
191
|
+
*
|
|
192
|
+
* Errors are printed as `#ERR <store> <message>` rather than suppressed. A
|
|
193
|
+
* blanket `$ErrorActionPreference='SilentlyContinue'` is what turned the first
|
|
194
|
+
* failure into a silent empty result, and a store reader that cannot say why it
|
|
195
|
+
* read nothing is the same defect class this whole change exists to fix.
|
|
196
|
+
*/
|
|
197
|
+
function windowsTrustScript() {
|
|
198
|
+
// Single line, ASCII only: it crosses CreateProcess as one argv entry.
|
|
199
|
+
const NS = 'System.Security.Cryptography.X509Certificates';
|
|
200
|
+
return [
|
|
201
|
+
`foreach($p in @(${WINDOWS_TRUST_STORES.map(([n, l]) => `@('${n}','${l}')`).join(',')})){`,
|
|
202
|
+
'try{',
|
|
203
|
+
// Every enum is CAST, never coerced from a string. The first version of this
|
|
204
|
+
// reader leaned on one such coercion and returned zero certificates with no
|
|
205
|
+
// error at all on a real host; a cast either resolves or throws into the
|
|
206
|
+
// catch below, which is the whole difference.
|
|
207
|
+
`$st=New-Object ${NS}.X509Store $p[0],([${NS}.StoreLocation]$p[1]);`,
|
|
208
|
+
`$st.Open([${NS}.OpenFlags]::ReadOnly);`,
|
|
209
|
+
'foreach($c in $st.Certificates){Write-Output ([Convert]::ToBase64String($c.RawData))}',
|
|
210
|
+
'$st.Close()',
|
|
211
|
+
'}catch{',
|
|
212
|
+
"Write-Output ('#ERR ' + $p[1] + '\\' + $p[0] + ' ' + $_.Exception.Message)",
|
|
213
|
+
'}}',
|
|
214
|
+
].join('');
|
|
215
|
+
}
|
|
216
|
+
/** Wrap one raw base64 DER blob into a PEM block, 64 characters per line. */
|
|
217
|
+
function base64ToPem(base64) {
|
|
218
|
+
const body = base64.replace(/\s+/g, '').match(/.{1,64}/g)?.join('\n') ?? '';
|
|
219
|
+
return `-----BEGIN CERTIFICATE-----\n${body}\n-----END CERTIFICATE-----`;
|
|
220
|
+
}
|
|
221
|
+
function readWindowsTrustAnchors(opts = {}) {
|
|
222
|
+
const exec = opts.exec ?? defaultExec;
|
|
223
|
+
const warnings = [];
|
|
224
|
+
const result = exec('powershell.exe', [
|
|
225
|
+
'-NoProfile',
|
|
226
|
+
'-NonInteractive',
|
|
227
|
+
'-ExecutionPolicy',
|
|
228
|
+
'Bypass',
|
|
229
|
+
'-Command',
|
|
230
|
+
windowsTrustScript(),
|
|
231
|
+
]);
|
|
232
|
+
if (result.error) {
|
|
233
|
+
warnings.push(`Windows trust store: powershell.exe failed (${result.error.message})`);
|
|
234
|
+
return { certs: [], sources: [], warnings };
|
|
235
|
+
}
|
|
236
|
+
if (result.status !== 0) {
|
|
237
|
+
const stderr = (result.stderr || '').trim().slice(0, 200);
|
|
238
|
+
warnings.push(`Windows trust store: powershell.exe exited ${result.status}${stderr ? ` — ${stderr}` : ''}`);
|
|
239
|
+
return { certs: [], sources: [], warnings };
|
|
240
|
+
}
|
|
241
|
+
const certs = [];
|
|
242
|
+
for (const line of (result.stdout || '').split(/\r?\n/)) {
|
|
243
|
+
const value = line.trim();
|
|
244
|
+
if (!value)
|
|
245
|
+
continue;
|
|
246
|
+
if (value.startsWith('#ERR ')) {
|
|
247
|
+
warnings.push(`Windows trust store: ${value.slice(5)}`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
// Anything else is one certificate's DER, base64-encoded on a single line.
|
|
251
|
+
if (!/^[A-Za-z0-9+/=]+$/.test(value))
|
|
252
|
+
continue;
|
|
253
|
+
certs.push(base64ToPem(value));
|
|
254
|
+
}
|
|
255
|
+
if (certs.length === 0 && warnings.length === 0) {
|
|
256
|
+
// Never a bare "returned nothing": the first version of this reader did
|
|
257
|
+
// exactly that on a real host and the message said nothing usable.
|
|
258
|
+
const stderr = (result.stderr || '').trim().slice(0, 300);
|
|
259
|
+
warnings.push('Windows trust store: powershell.exe exited 0 but printed no certificate and no error' +
|
|
260
|
+
`${stderr ? ` — stderr: ${stderr}` : ' (stderr was empty)'}`);
|
|
261
|
+
}
|
|
262
|
+
// One aggregate source line: the script reads both Root stores in one pass and
|
|
263
|
+
// a per-store split would need a second subprocess for no operator value.
|
|
264
|
+
const label = WINDOWS_TRUST_STORES.map(([n, l]) => `Cert:\\${l}\\${n}`).join(' + ');
|
|
265
|
+
return {
|
|
266
|
+
certs,
|
|
267
|
+
sources: certs.length > 0 ? [{ name: label, count: certs.length }] : [],
|
|
268
|
+
warnings,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* macOS: the admin-installed System keychain plus the Apple root keychain.
|
|
273
|
+
*
|
|
274
|
+
* An MDM- or admin-installed enterprise root lands in `/Library/Keychains/System.keychain`.
|
|
275
|
+
* The Apple root keychain is included so a chain that happens to terminate at an
|
|
276
|
+
* Apple-distributed root the Mozilla list omits still validates.
|
|
277
|
+
*/
|
|
278
|
+
const MAC_KEYCHAINS = [
|
|
279
|
+
'/Library/Keychains/System.keychain',
|
|
280
|
+
'/System/Library/Keychains/SystemRootCertificates.keychain',
|
|
281
|
+
];
|
|
282
|
+
/**
|
|
283
|
+
* Subjects the admin has explicitly set to "Never Trust" in the admin domain.
|
|
284
|
+
*
|
|
285
|
+
* `security find-certificate` lists what is STORED in a keychain, not what is
|
|
286
|
+
* TRUSTED — a certificate the admin has explicitly denied is still returned by
|
|
287
|
+
* it. Promoting one of those to a trust anchor would invert the machine
|
|
288
|
+
* owner's decision, which is the exact opposite of what this module exists to
|
|
289
|
+
* honour. `dump-trust-settings -d` is the admin-domain override list; each
|
|
290
|
+
* entry names a certificate and its result type.
|
|
291
|
+
*
|
|
292
|
+
* Parsed loosely on purpose: an unreadable or absent settings list must mean
|
|
293
|
+
* "no explicit overrides", never "drop everything". Exported for the fixture
|
|
294
|
+
* tests, which drive it with the real command's output shape.
|
|
295
|
+
*/
|
|
296
|
+
function parseDeniedTrustSubjects(dump) {
|
|
297
|
+
const denied = new Set();
|
|
298
|
+
let current = null;
|
|
299
|
+
for (const line of (dump || '').split(/\r?\n/)) {
|
|
300
|
+
const cert = line.match(/^Cert\s+\d+\s*:\s*(.+?)\s*$/);
|
|
301
|
+
if (cert) {
|
|
302
|
+
current = cert[1];
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (/kSecTrustSettingsResultDeny/.test(line) && current)
|
|
306
|
+
denied.add(current);
|
|
307
|
+
}
|
|
308
|
+
return denied;
|
|
309
|
+
}
|
|
310
|
+
function readMacTrustAnchors(opts = {}) {
|
|
311
|
+
const exec = opts.exec ?? defaultExec;
|
|
312
|
+
const certs = [];
|
|
313
|
+
const sources = [];
|
|
314
|
+
const warnings = [];
|
|
315
|
+
// Admin-domain overrides first, so a denied root is dropped rather than
|
|
316
|
+
// promoted. A failure here is non-fatal: the anchors are still filtered to
|
|
317
|
+
// CA certificates by `readPlatformTrustAnchors`.
|
|
318
|
+
let denied = new Set();
|
|
319
|
+
const dump = exec('/usr/bin/security', ['dump-trust-settings', '-d']);
|
|
320
|
+
if (!dump.error && typeof dump.stdout === 'string') {
|
|
321
|
+
denied = parseDeniedTrustSubjects(dump.stdout);
|
|
322
|
+
}
|
|
323
|
+
for (const keychain of MAC_KEYCHAINS) {
|
|
324
|
+
const result = exec('/usr/bin/security', ['find-certificate', '-a', '-p', keychain]);
|
|
325
|
+
if (result.error) {
|
|
326
|
+
warnings.push(`macOS keychain ${keychain}: ${result.error.message}`);
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (result.status !== 0) {
|
|
330
|
+
warnings.push(`macOS keychain ${keychain}: security exited ${result.status}`);
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
const found = extractPemBlocks(result.stdout || '');
|
|
334
|
+
const kept = denied.size === 0 ? found : found.filter((pem) => !isDeniedSubject(pem, denied));
|
|
335
|
+
if (kept.length < found.length) {
|
|
336
|
+
warnings.push(`macOS keychain ${keychain}: skipped ${found.length - kept.length} certificate(s) ` +
|
|
337
|
+
'the admin has set to Never Trust');
|
|
338
|
+
}
|
|
339
|
+
if (kept.length > 0) {
|
|
340
|
+
certs.push(...kept);
|
|
341
|
+
sources.push({ name: keychain, count: kept.length });
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return { certs, sources, warnings };
|
|
345
|
+
}
|
|
346
|
+
/** Does this PEM's subject appear in the admin's deny list? */
|
|
347
|
+
function isDeniedSubject(pem, denied) {
|
|
348
|
+
const summary = summarizeCertificate(pem);
|
|
349
|
+
if (!summary)
|
|
350
|
+
return false;
|
|
351
|
+
for (const name of denied) {
|
|
352
|
+
if (summary.commonName === name || summary.subject.includes(name))
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Parse a PEM far enough to answer "is this a CA, and what is its subject".
|
|
359
|
+
*
|
|
360
|
+
* Returns null when the certificate cannot be parsed at all, which is treated
|
|
361
|
+
* as "not admissible as an anchor" — an unparseable blob is not something to
|
|
362
|
+
* hand OpenSSL as a root.
|
|
363
|
+
*/
|
|
364
|
+
function summarizeCertificate(pem) {
|
|
365
|
+
try {
|
|
366
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
367
|
+
const { X509Certificate } = require('crypto');
|
|
368
|
+
const cert = new X509Certificate(pem);
|
|
369
|
+
const subject = String(cert.subject || '');
|
|
370
|
+
const cn = subject.match(/^CN=(.+)$/m)?.[1]?.trim();
|
|
371
|
+
return { ca: cert.ca === true, subject, ...(cn ? { commonName: cn } : {}) };
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* An anchor must be a CA. Applied to every platform, not only macOS.
|
|
379
|
+
*
|
|
380
|
+
* A keychain or a certificate store holds whatever has been PUT there, which on
|
|
381
|
+
* macOS includes end-entity certificates a user once saved. Passing one of
|
|
382
|
+
* those in `ca:` makes it a trust ANCHOR — it would then validate for its own
|
|
383
|
+
* name with no issuer above it, which is a trust elevation nobody asked for.
|
|
384
|
+
* Filtering on `basicConstraints CA:TRUE` is a no-op on a Windows `Root` store
|
|
385
|
+
* and on a distro CA bundle (both hold only CAs) and closes the macOS case.
|
|
386
|
+
*/
|
|
387
|
+
function keepOnlyCertificateAuthorities(certs) {
|
|
388
|
+
const kept = [];
|
|
389
|
+
let dropped = 0;
|
|
390
|
+
for (const pem of certs) {
|
|
391
|
+
const summary = summarizeCertificate(pem);
|
|
392
|
+
if (summary?.ca)
|
|
393
|
+
kept.push(pem);
|
|
394
|
+
else
|
|
395
|
+
dropped++;
|
|
396
|
+
}
|
|
397
|
+
return { kept, dropped };
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Linux: the distro CA bundle, which Node also does not read.
|
|
401
|
+
*
|
|
402
|
+
* `SSL_CERT_FILE`/`SSL_CERT_DIR` are honoured first because they are the
|
|
403
|
+
* documented override on this platform and are what a container image or a
|
|
404
|
+
* hardened host sets. First existing bundle wins — they are copies of one
|
|
405
|
+
* another on any distro that ships more than one path.
|
|
406
|
+
*/
|
|
407
|
+
const LINUX_CA_BUNDLES = [
|
|
408
|
+
'/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Alpine
|
|
409
|
+
'/etc/pki/tls/certs/ca-bundle.crt', // RHEL, Fedora, Amazon Linux
|
|
410
|
+
'/etc/ssl/ca-bundle.pem', // SUSE
|
|
411
|
+
'/etc/ssl/cert.pem', // Alpine, some BSD-ish layouts
|
|
412
|
+
];
|
|
413
|
+
function readLinuxTrustAnchors(opts = {}) {
|
|
414
|
+
const readFile = opts.readFile ?? defaultReadFile;
|
|
415
|
+
const env = opts.env ?? process.env;
|
|
416
|
+
const certs = [];
|
|
417
|
+
const sources = [];
|
|
418
|
+
const warnings = [];
|
|
419
|
+
const explicit = env.SSL_CERT_FILE;
|
|
420
|
+
const candidates = explicit ? [explicit, ...LINUX_CA_BUNDLES] : LINUX_CA_BUNDLES;
|
|
421
|
+
for (const candidate of candidates) {
|
|
422
|
+
let text;
|
|
423
|
+
try {
|
|
424
|
+
text = readFile(candidate);
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
const found = extractPemBlocks(text);
|
|
430
|
+
if (found.length > 0) {
|
|
431
|
+
certs.push(...found);
|
|
432
|
+
sources.push({ name: candidate, count: found.length });
|
|
433
|
+
break; // first readable bundle wins; the rest are copies
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
const certDir = env.SSL_CERT_DIR;
|
|
437
|
+
if (certDir) {
|
|
438
|
+
for (const dir of certDir.split(path.delimiter).filter(Boolean)) {
|
|
439
|
+
let entries = [];
|
|
440
|
+
try {
|
|
441
|
+
entries = fs.readdirSync(dir);
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
warnings.push(`SSL_CERT_DIR ${dir}: not readable`);
|
|
445
|
+
continue;
|
|
446
|
+
}
|
|
447
|
+
let dirCount = 0;
|
|
448
|
+
for (const entry of entries) {
|
|
449
|
+
if (!/\.(pem|crt|cer)$/i.test(entry))
|
|
450
|
+
continue;
|
|
451
|
+
try {
|
|
452
|
+
const found = extractPemBlocks(readFile(path.join(dir, entry)));
|
|
453
|
+
certs.push(...found);
|
|
454
|
+
dirCount += found.length;
|
|
455
|
+
}
|
|
456
|
+
catch {
|
|
457
|
+
/* one unreadable file must not lose the rest of the directory */
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
if (dirCount > 0)
|
|
461
|
+
sources.push({ name: dir, count: dirCount });
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (certs.length === 0) {
|
|
465
|
+
warnings.push(`Linux trust store: none of ${LINUX_CA_BUNDLES.join(', ')} was readable`);
|
|
466
|
+
}
|
|
467
|
+
return { certs, sources, warnings };
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* `NODE_EXTRA_CA_CERTS`, read EXPLICITLY.
|
|
471
|
+
*
|
|
472
|
+
* Node applies this variable to the default secure context. Passing `ca:` on a
|
|
473
|
+
* request replaces that context's CA set, so wiring an agent with `ca:` and
|
|
474
|
+
* nothing else would have silently disabled an admin's existing workaround for
|
|
475
|
+
* this very bug. We therefore read it ourselves and merge it in.
|
|
476
|
+
*/
|
|
477
|
+
function readNodeExtraCaCerts(opts = {}) {
|
|
478
|
+
const env = opts.env ?? process.env;
|
|
479
|
+
const readFile = opts.readFile ?? defaultReadFile;
|
|
480
|
+
const target = env.NODE_EXTRA_CA_CERTS;
|
|
481
|
+
if (!target)
|
|
482
|
+
return { certs: [], sources: [], warnings: [] };
|
|
483
|
+
try {
|
|
484
|
+
const found = extractPemBlocks(readFile(target));
|
|
485
|
+
if (found.length === 0) {
|
|
486
|
+
return {
|
|
487
|
+
certs: [],
|
|
488
|
+
sources: [],
|
|
489
|
+
warnings: [`NODE_EXTRA_CA_CERTS=${target}: no PEM certificate found in it`],
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
return { certs: found, sources: [{ name: `NODE_EXTRA_CA_CERTS (${target})`, count: found.length }], warnings: [] };
|
|
493
|
+
}
|
|
494
|
+
catch (err) {
|
|
495
|
+
return {
|
|
496
|
+
certs: [],
|
|
497
|
+
sources: [],
|
|
498
|
+
warnings: [`NODE_EXTRA_CA_CERTS=${target}: not readable (${err.message})`],
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
/** Read every store this platform has. Uncached — see `resolveTrustAnchors`. */
|
|
503
|
+
function readPlatformTrustAnchors(opts = {}) {
|
|
504
|
+
const platform = opts.platform ?? process.platform;
|
|
505
|
+
let native;
|
|
506
|
+
if (platform === 'win32')
|
|
507
|
+
native = readWindowsTrustAnchors(opts);
|
|
508
|
+
else if (platform === 'darwin')
|
|
509
|
+
native = readMacTrustAnchors(opts);
|
|
510
|
+
else
|
|
511
|
+
native = readLinuxTrustAnchors(opts);
|
|
512
|
+
const extra = readNodeExtraCaCerts(opts);
|
|
513
|
+
const seen = new Set();
|
|
514
|
+
const deduped = [];
|
|
515
|
+
for (const pem of [...native.certs, ...extra.certs]) {
|
|
516
|
+
if (seen.has(pem))
|
|
517
|
+
continue;
|
|
518
|
+
seen.add(pem);
|
|
519
|
+
deduped.push(pem);
|
|
520
|
+
}
|
|
521
|
+
// An anchor must be a CA — see keepOnlyCertificateAuthorities. Applied AFTER
|
|
522
|
+
// the merge so it covers NODE_EXTRA_CA_CERTS too: an admin who points that at
|
|
523
|
+
// a leaf has made a mistake, and turning it into a root is not the fix.
|
|
524
|
+
const { kept, dropped } = keepOnlyCertificateAuthorities(deduped);
|
|
525
|
+
const warnings = [...native.warnings, ...extra.warnings];
|
|
526
|
+
if (dropped > 0) {
|
|
527
|
+
warnings.push(`skipped ${dropped} certificate(s) that are not certificate authorities — ` +
|
|
528
|
+
'a trust anchor must carry basicConstraints CA:TRUE');
|
|
529
|
+
}
|
|
530
|
+
return {
|
|
531
|
+
certs: kept,
|
|
532
|
+
sources: [...native.sources, ...extra.sources],
|
|
533
|
+
warnings,
|
|
534
|
+
resolvedAtMs: Date.now(),
|
|
535
|
+
platform,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
let cached = null;
|
|
539
|
+
/**
|
|
540
|
+
* The cached read. Callers on the request path use this; it costs one
|
|
541
|
+
* subprocess per TTL, not one per request.
|
|
542
|
+
*
|
|
543
|
+
* The cache holds ONE snapshot with no key, which is valid exactly while the
|
|
544
|
+
* platform and environment are process-wide constants — true in production, and
|
|
545
|
+
* NOT true when a caller injects them. An injected `platform`/`exec`/`readFile`/
|
|
546
|
+
* `env` therefore bypasses the cache in both directions: it neither reads a
|
|
547
|
+
* snapshot taken under a different environment nor publishes its own for
|
|
548
|
+
* someone else to read. (Same rule, same reason, as `resolveProxyCached`.)
|
|
549
|
+
*/
|
|
550
|
+
function resolveTrustAnchors(opts = {}) {
|
|
551
|
+
const injected = Boolean(opts.platform || opts.exec || opts.readFile || opts.env);
|
|
552
|
+
if (injected)
|
|
553
|
+
return readPlatformTrustAnchors(opts);
|
|
554
|
+
const now = Date.now();
|
|
555
|
+
if (cached && now - cached.resolvedAtMs < exports.TRUST_CACHE_TTL_MS)
|
|
556
|
+
return cached;
|
|
557
|
+
cached = readPlatformTrustAnchors(opts);
|
|
558
|
+
return cached;
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Drop the cache so the next resolve re-reads the store.
|
|
562
|
+
*
|
|
563
|
+
* Called when a certificate-verification failure is classified: the single most
|
|
564
|
+
* likely explanation for one is that IT has just deployed (or is about to
|
|
565
|
+
* deploy) the inspection root, and re-reading is how the connector recovers
|
|
566
|
+
* without the restart nobody is there to perform.
|
|
567
|
+
*/
|
|
568
|
+
function invalidateTrustAnchorCache() {
|
|
569
|
+
cached = null;
|
|
570
|
+
}
|
|
571
|
+
/** For tests: the snapshot currently held, without taking a new one. */
|
|
572
|
+
function peekTrustAnchorCache() {
|
|
573
|
+
return cached;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* The `ca` value to hand to TLS: Node's bundled roots FIRST, then the machine's.
|
|
577
|
+
*
|
|
578
|
+
* Including `tls.rootCertificates` is the load-bearing half. `ca:` REPLACES the
|
|
579
|
+
* default set rather than extending it, so passing only the machine anchors
|
|
580
|
+
* would have made a connector on a normal network stop trusting the public web
|
|
581
|
+
* PKI — turning a corporate-network bug into a fleet-wide outage. Returns
|
|
582
|
+
* `undefined` when there is nothing to add, so the default context is used
|
|
583
|
+
* untouched on the overwhelming majority of hosts.
|
|
584
|
+
*/
|
|
585
|
+
function buildCaBundle(anchors) {
|
|
586
|
+
if (anchors.certs.length === 0)
|
|
587
|
+
return undefined;
|
|
588
|
+
return [...tls.rootCertificates, ...anchors.certs];
|
|
589
|
+
}
|
|
590
|
+
/** One operator-facing line describing what was resolved. */
|
|
591
|
+
function describeTrustAnchors(anchors) {
|
|
592
|
+
if (anchors.certs.length === 0) {
|
|
593
|
+
const why = anchors.warnings.length > 0 ? ` (${anchors.warnings[0]})` : '';
|
|
594
|
+
return `trust: Node bundled roots only — no platform trust store read${why}`;
|
|
595
|
+
}
|
|
596
|
+
const stores = anchors.sources.map((s) => `${s.name} x${s.count}`).join(', ');
|
|
597
|
+
return `trust: Node bundled roots + ${anchors.certs.length} from ${stores}`;
|
|
598
|
+
}
|
|
599
|
+
/** Platform-appropriate instruction for getting a root INTO the store. */
|
|
600
|
+
function trustStoreInstallHint(platform = process.platform) {
|
|
601
|
+
if (platform === 'win32') {
|
|
602
|
+
return ('Ask IT to install the inspection root into this machine\'s ' +
|
|
603
|
+
'"Trusted Root Certification Authorities" store (Local Machine or Current User). ' +
|
|
604
|
+
'The connector re-reads that store automatically; no reinstall is needed.');
|
|
605
|
+
}
|
|
606
|
+
if (platform === 'darwin') {
|
|
607
|
+
return ('Ask IT to install the inspection root into the System keychain ' +
|
|
608
|
+
`(/Library/Keychains/System.keychain) on ${os.hostname()}. ` +
|
|
609
|
+
'The connector re-reads it automatically; no reinstall is needed.');
|
|
610
|
+
}
|
|
611
|
+
return ('Install the inspection root into the system CA bundle ' +
|
|
612
|
+
'(e.g. /usr/local/share/ca-certificates + update-ca-certificates), or point ' +
|
|
613
|
+
'NODE_EXTRA_CA_CERTS at a PEM file containing it.');
|
|
614
|
+
}
|
|
615
|
+
//# sourceMappingURL=enterpriseTrust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterpriseTrust.js","sourceRoot":"","sources":["../src/enterpriseTrust.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,16 @@ export type { CommandContext, DeviceCommand, CommandResult } from './CommandRout
|
|
|
6
6
|
export { runInit } from './init';
|
|
7
7
|
export { runDiagnose } from './diagnose';
|
|
8
8
|
export type { DiagnosticReport } from './diagnose';
|
|
9
|
+
export { installEnterpriseNetworking, describeNetworkPosture, getEnterpriseAgent, diagnoseTransportError, resetEnterpriseNetworkCaches, EnterpriseHttpsAgent, } from './enterpriseNetwork';
|
|
10
|
+
export type { NetworkPosture, EnterpriseNetworkOptions } from './enterpriseNetwork';
|
|
11
|
+
export { TransportFailure, classifyTransportError, formatTransportFailure, isTrustFailure, } from './transportFailure';
|
|
12
|
+
export type { TransportFailureClass } from './transportFailure';
|
|
13
|
+
export { resolveTrustAnchors, describeTrustAnchors } from './enterpriseTrust';
|
|
14
|
+
export type { TrustAnchorResolution } from './enterpriseTrust';
|
|
15
|
+
export { resolveProxyForUrl, describeProxy } from './enterpriseProxy';
|
|
16
|
+
export type { ProxyResolution } from './enterpriseProxy';
|
|
17
|
+
export { probeLocalNetworkAccess, decideLocalNetworkVerdict, LOCAL_NETWORK_DENIED_SUGGESTION, LOCAL_NETWORK_DENIED_SUMMARY, } from './localNetworkAccess';
|
|
18
|
+
export type { LocalNetworkVerdict, LocalNetworkProbeResult, LocalNetworkProbeEvidence, LocalNetworkProbeOptions, } from './localNetworkAccess';
|
|
9
19
|
export { AudienceAnalyzeClient, defaultHttpPoster } from './AudienceAnalyzeClient';
|
|
10
20
|
export type { AudienceAnalyzeClientOptions, AudienceAnalyzeRequest, AudienceAnalyzeResponse, CameraHealthFailureClass, CameraHealthReport, CameraHealthState, FrameDimensions, HttpPoster, } from './AudienceAnalyzeClient';
|
|
11
21
|
export { CloudSensingManager, buildSensingLoops, buildTiledCameras, classifyRtspFailureClass, resolveFeeds, } from './CloudSensingManager';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|