node-opcua-server-configuration 2.186.13 → 2.186.14
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/dist/push_certificate_manager.d.ts +2 -0
- package/dist/push_certificate_manager.d.ts.map +1 -1
- package/dist/server/application_setup.d.ts +5 -0
- package/dist/server/application_setup.d.ts.map +1 -1
- package/dist/server/application_setup.js +7 -3
- package/dist/server/application_setup.js.map +1 -1
- package/dist/server/promote_trust_list.d.ts.map +1 -1
- package/dist/server/promote_trust_list.js +70 -32
- package/dist/server/promote_trust_list.js.map +1 -1
- package/dist/server/push_certificate_manager/get_rejected_list.d.ts +7 -0
- package/dist/server/push_certificate_manager/get_rejected_list.d.ts.map +1 -1
- package/dist/server/push_certificate_manager/get_rejected_list.js +7 -2
- package/dist/server/push_certificate_manager/get_rejected_list.js.map +1 -1
- package/dist/trust_list.d.ts +14 -14
- package/dist/trust_list.d.ts.map +1 -1
- package/package.json +8 -8
- package/source/push_certificate_manager.ts +2 -0
- package/source/server/application_setup.ts +8 -3
- package/source/server/promote_trust_list.ts +86 -32
- package/source/server/push_certificate_manager/get_rejected_list.ts +7 -2
- package/source/trust_list.ts +14 -14
|
@@ -124,6 +124,8 @@ export interface PushCertificateManager {
|
|
|
124
124
|
createSigningRequest(certificateGroupId: NodeId | string, certificateTypeId: NodeId | string, subjectName: string | null, regeneratePrivateKey?: boolean, nonce?: ByteString): Promise<CreateSigningRequestResult>;
|
|
125
125
|
/**
|
|
126
126
|
* GetRejectedList Method returns the list of Certificates that have been rejected by the Server.
|
|
127
|
+
* It is a shortcut for the GetRejectedList Method on the DefaultApplicationGroup CertificateGroup
|
|
128
|
+
* (OPC 10000-12 §7.10.12): Certificates rejected by the other CertificateGroups are not returned.
|
|
127
129
|
* No rules are defined for how the Server updates this list or how long a Certificate is kept in
|
|
128
130
|
* the list. It is recommended that every valid but untrusted Certificate be added to the rejected
|
|
129
131
|
* list as long as storage is available. Servers should omit older entries from the list returned if
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push_certificate_manager.d.ts","sourceRoot":"","sources":["../source/push_certificate_manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACnC;;;;OAIG;IACH,6BAA6B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,iBAAiB,CACb,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAClC,WAAW,EAAE,UAAU,EACvB,kBAAkB,EAAE,UAAU,EAAE,EAChC,gBAAgB,CAAC,EAAE,QAAQ,EAC3B,UAAU,CAAC,EAAE,UAAU,GACxB,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,oBAAoB,CAChB,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAClC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,oBAAoB,CAAC,EAAE,OAAO,EAC9B,KAAK,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEvC
|
|
1
|
+
{"version":3,"file":"push_certificate_manager.d.ts","sourceRoot":"","sources":["../source/push_certificate_manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACnC;;;;OAIG;IACH,6BAA6B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,iBAAiB,CACb,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAClC,WAAW,EAAE,UAAU,EACvB,kBAAkB,EAAE,UAAU,EAAE,EAChC,gBAAgB,CAAC,EAAE,QAAQ,EAC3B,UAAU,CAAC,EAAE,UAAU,GACxB,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,oBAAoB,CAChB,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAClC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,oBAAoB,CAAC,EAAE,OAAO,EAC9B,KAAK,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEvC;;;;;;;;;;;;;;;;OAgBG;IAEH,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;CACtE"}
|
|
@@ -11,6 +11,11 @@ export declare function confirmTrust(cm: CertificateManager, list: ProvisionalLi
|
|
|
11
11
|
* parsed is skipped with a warning rather than failing the caller.
|
|
12
12
|
*/
|
|
13
13
|
export declare function leafThumbprintsIn(folder: string): Promise<string[]>;
|
|
14
|
+
/** The leaf certificate of each certificate file in a PKI folder, with its thumbprint, skipping what does not parse. */
|
|
15
|
+
export declare function leafCertificatesIn(folder: string): Promise<{
|
|
16
|
+
thumbprint: string;
|
|
17
|
+
certificate: Buffer;
|
|
18
|
+
}[]>;
|
|
14
19
|
/** Whether the trusted list holds at least one certificate that was not trusted provisionally. */
|
|
15
20
|
export declare function hasConfirmedTrust(cm: CertificateManager): Promise<boolean>;
|
|
16
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application_setup.d.ts","sourceRoot":"","sources":["../../source/server/application_setup.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AASzE,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AA+CpD,kHAAkH;AAClH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7H;AAED,0FAA0F;AAC1F,wBAAsB,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAStH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"application_setup.d.ts","sourceRoot":"","sources":["../../source/server/application_setup.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AASzE,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AA+CpD,kHAAkH;AAClH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7H;AAED,0FAA0F;AAC1F,wBAAsB,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAStH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEzE;AAED,wHAAwH;AACxH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAc/G;AAED,kGAAkG;AAClG,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBtF;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAK3F;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAEtE"}
|
|
@@ -87,9 +87,13 @@ export async function confirmTrust(cm, list, thumbprints) {
|
|
|
87
87
|
* parsed is skipped with a warning rather than failing the caller.
|
|
88
88
|
*/
|
|
89
89
|
export async function leafThumbprintsIn(folder) {
|
|
90
|
+
return (await leafCertificatesIn(folder)).map((entry) => entry.thumbprint);
|
|
91
|
+
}
|
|
92
|
+
/** The leaf certificate of each certificate file in a PKI folder, with its thumbprint, skipping what does not parse. */
|
|
93
|
+
export async function leafCertificatesIn(folder) {
|
|
90
94
|
if (!fs.existsSync(folder))
|
|
91
95
|
return [];
|
|
92
|
-
const
|
|
96
|
+
const entries = [];
|
|
93
97
|
for (const file of await fs.promises.readdir(folder)) {
|
|
94
98
|
const ext = path.extname(file);
|
|
95
99
|
if (ext !== ".der" && ext !== ".pem")
|
|
@@ -97,13 +101,13 @@ export async function leafThumbprintsIn(folder) {
|
|
|
97
101
|
try {
|
|
98
102
|
const chain = await readCertificateChainAsync(path.join(folder, file));
|
|
99
103
|
if (chain.length > 0)
|
|
100
|
-
|
|
104
|
+
entries.push({ thumbprint: makeSHA1Thumbprint(chain[0]).toString("hex"), certificate: chain[0] });
|
|
101
105
|
}
|
|
102
106
|
catch (err) {
|
|
103
107
|
warningLog(`[TrustList] skipping ${path.join(folder, file)}: not a certificate`, err.message);
|
|
104
108
|
}
|
|
105
109
|
}
|
|
106
|
-
return
|
|
110
|
+
return entries;
|
|
107
111
|
}
|
|
108
112
|
/** Whether the trusted list holds at least one certificate that was not trusted provisionally. */
|
|
109
113
|
export async function hasConfirmedTrust(cm) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application_setup.js","sourceRoot":"","sources":["../../source/server/application_setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"application_setup.js","sourceRoot":"","sources":["../../source/server/application_setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote_trust_list.d.ts","sourceRoot":"","sources":["../../source/server/promote_trust_list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAKR,QAAQ,EAER,WAAW,EAEX,UAAU,EACb,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"promote_trust_list.d.ts","sourceRoot":"","sources":["../../source/server/promote_trust_list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAKR,QAAQ,EAER,WAAW,EAEX,UAAU,EACb,MAAM,0BAA0B,CAAC;AAisBlC,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,WAAW,iBAiL5D;AAED,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,UAAU,GAAG,QAAQ,QAKnF"}
|
|
@@ -6,7 +6,7 @@ import fs from "node:fs";
|
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
import { fs as MemFs } from "memfs";
|
|
8
8
|
import { BinaryStream } from "node-opcua-binary-stream";
|
|
9
|
-
import { exploreCertificate, makeSHA1Thumbprint, split_der, verifyCertificateChain } from "node-opcua-crypto/web";
|
|
9
|
+
import { exploreCertificate, makeSHA1Thumbprint, split_der, verifyCertificateChain, verifyCertificateSignature } from "node-opcua-crypto/web";
|
|
10
10
|
import { AccessRestrictionsFlag } from "node-opcua-data-model";
|
|
11
11
|
import { checkDebugFlag, make_debugLog, make_errorLog, make_warningLog } from "node-opcua-debug";
|
|
12
12
|
import { installFileType, OpenFileMode } from "node-opcua-file-transfer";
|
|
@@ -14,7 +14,7 @@ import { VerificationStatus } from "node-opcua-pki";
|
|
|
14
14
|
import { StatusCodes } from "node-opcua-status-code";
|
|
15
15
|
import { TrustListDataType } from "node-opcua-types";
|
|
16
16
|
import { DataType, Variant } from "node-opcua-variant";
|
|
17
|
-
import { confirmTrust, isSharedTrustListStore, leafThumbprintsIn } from "./application_setup.js";
|
|
17
|
+
import { confirmTrust, isSharedTrustListStore, leafCertificatesIn, leafThumbprintsIn } from "./application_setup.js";
|
|
18
18
|
import { rolePermissionAdminOnly } from "./roles_and_permissions.js";
|
|
19
19
|
import { hasEncryptedChannel, hasExpectedUserAccess } from "./tools.js";
|
|
20
20
|
import { TrustListMasks, writeTrustList } from "./trust_list_server.js";
|
|
@@ -56,6 +56,46 @@ function trustListIsAlreadyOpened(trustList) {
|
|
|
56
56
|
const openCount = dataValue.value.value;
|
|
57
57
|
return openCount > 0;
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* AddCertificate and RemoveCertificate "cannot be called if the containing
|
|
61
|
+
* TrustList Object is open" (OPC 10000-12 §7.8.2.6, §7.8.2.7). Their result
|
|
62
|
+
* tables tell the two cases apart: open with write access is Bad_InvalidState,
|
|
63
|
+
* open for read only is Bad_NotWritable.
|
|
64
|
+
*/
|
|
65
|
+
function statusWhenOpen(trustList) {
|
|
66
|
+
if (trustList.$$openedForWrite) {
|
|
67
|
+
return StatusCodes.BadInvalidState;
|
|
68
|
+
}
|
|
69
|
+
if (trustListIsAlreadyOpened(trustList)) {
|
|
70
|
+
return StatusCodes.BadNotWritable;
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Whether removing `thumbprint` from `store` would leave another Certificate
|
|
76
|
+
* of the TrustList without an issuer able to validate it (§7.8.2.7:
|
|
77
|
+
* Bad_CertificateChainIncomplete). Both lists count, so an intermediate CA in
|
|
78
|
+
* the Issuer list keeps its root. A copy of the same CA kept in the other
|
|
79
|
+
* list, or another CA with the same key, still validates the child.
|
|
80
|
+
*/
|
|
81
|
+
async function isNeededToValidateAnother(cm, store, thumbprint, certificate) {
|
|
82
|
+
const entries = [
|
|
83
|
+
...(await leafCertificatesIn(cm.trustedFolder)).map((e) => ({ ...e, store: "trusted" })),
|
|
84
|
+
...(await leafCertificatesIn(cm.issuersCertFolder)).map((e) => ({ ...e, store: "issuers" }))
|
|
85
|
+
];
|
|
86
|
+
const remaining = entries.filter((e) => !(e.store === store && e.thumbprint === thumbprint));
|
|
87
|
+
const signedBy = (child, issuer) => {
|
|
88
|
+
try {
|
|
89
|
+
return verifyCertificateSignature(child, issuer);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
return remaining.some((child) => child.thumbprint !== thumbprint &&
|
|
96
|
+
signedBy(child.certificate, certificate) &&
|
|
97
|
+
!remaining.some((other) => other.thumbprint !== child.thumbprint && signedBy(child.certificate, other.certificate)));
|
|
98
|
+
}
|
|
59
99
|
/**
|
|
60
100
|
* Update the mandatory LastUpdateTime property whenever the trust list is modified.
|
|
61
101
|
* Per OPC UA Part 12 spec, this must be updated after AddCertificate, RemoveCertificate, or CloseAndUpdate.
|
|
@@ -453,8 +493,9 @@ async function _addCertificate(inputArguments, context) {
|
|
|
453
493
|
if (!cm) {
|
|
454
494
|
return { statusCode: StatusCodes.BadInternalError };
|
|
455
495
|
}
|
|
456
|
-
|
|
457
|
-
|
|
496
|
+
const openStatus = statusWhenOpen(trustList);
|
|
497
|
+
if (openStatus) {
|
|
498
|
+
return { statusCode: openStatus };
|
|
458
499
|
}
|
|
459
500
|
const certificateBuffer = inputArguments[0].value;
|
|
460
501
|
const isTrustedCertificate = inputArguments[1].value;
|
|
@@ -496,40 +537,37 @@ async function _removeCertificate(inputArguments, context) {
|
|
|
496
537
|
if (!cm) {
|
|
497
538
|
return { statusCode: StatusCodes.BadInternalError };
|
|
498
539
|
}
|
|
499
|
-
|
|
500
|
-
|
|
540
|
+
const openStatus = statusWhenOpen(trustList);
|
|
541
|
+
if (openStatus) {
|
|
542
|
+
return { statusCode: openStatus };
|
|
501
543
|
}
|
|
502
544
|
const thumbprint = inputArguments[0].value;
|
|
503
545
|
const isTrustedCertificate = inputArguments[1].value;
|
|
504
546
|
try {
|
|
505
547
|
// Normalize thumbprint - remove "NodeOPCUA[" prefix if present
|
|
506
548
|
const normalizedThumbprint = thumbprint.replace(/^NodeOPCUA\[|\]$/g, "").toLowerCase();
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
// Also remove CRLs issued by this CA
|
|
530
|
-
await cm.removeRevocationListsForIssuer(issuerCert, "issuers");
|
|
531
|
-
await confirmTrust(cm, "issuers", [normalizedThumbprint]);
|
|
532
|
-
}
|
|
549
|
+
// §7.8.2.7, the same rules for both lists: Bad_InvalidArgument when
|
|
550
|
+
// the thumbprint is not in the list, Bad_CertificateChainIncomplete
|
|
551
|
+
// when another Certificate still needs it, checked before anything is
|
|
552
|
+
// removed, and a CA's CRLs leave with it.
|
|
553
|
+
const store = isTrustedCertificate ? "trusted" : "issuers";
|
|
554
|
+
const folder = isTrustedCertificate ? cm.trustedFolder : cm.issuersCertFolder;
|
|
555
|
+
const certificate = (await leafCertificatesIn(folder)).find((e) => e.thumbprint === normalizedThumbprint)?.certificate;
|
|
556
|
+
if (!certificate) {
|
|
557
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
558
|
+
}
|
|
559
|
+
if (await isNeededToValidateAnother(cm, store, normalizedThumbprint, certificate)) {
|
|
560
|
+
warningLog("Certificate is needed for chain validation");
|
|
561
|
+
return { statusCode: StatusCodes.BadCertificateChainIncomplete };
|
|
562
|
+
}
|
|
563
|
+
const removed = isTrustedCertificate
|
|
564
|
+
? await cm.removeTrustedCertificate(normalizedThumbprint)
|
|
565
|
+
: await cm.removeIssuer(normalizedThumbprint);
|
|
566
|
+
if (!removed) {
|
|
567
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
568
|
+
}
|
|
569
|
+
await cm.removeRevocationListsForIssuer(certificate, store);
|
|
570
|
+
await confirmTrust(cm, store, [normalizedThumbprint]);
|
|
533
571
|
updateLastUpdateTime(trustList);
|
|
534
572
|
emitTrustListUpdated(trustList);
|
|
535
573
|
doDebug && debugLog("_removeCertificate - done, isTrustedCertificate=", isTrustedCertificate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote_trust_list.js","sourceRoot":"","sources":["../../source/server/promote_trust_list.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"promote_trust_list.js","sourceRoot":"","sources":["../../source/server/promote_trust_list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { GetRejectedListResult } from "../../push_certificate_manager.js";
|
|
2
2
|
import type { PushCertificateManagerInternalContext } from "./internal_context.js";
|
|
3
|
+
/**
|
|
4
|
+
* ServerConfiguration.GetRejectedList "is a shortcut for the GetRejectedList
|
|
5
|
+
* Method on the DefaultApplicationGroup CertificateGroup" (OPC 10000-12
|
|
6
|
+
* §7.10.12), so only that group's rejected Certificates are returned. A
|
|
7
|
+
* rejected user token or HTTPS Certificate is not one a Client can move into
|
|
8
|
+
* the DefaultApplicationGroup TrustList.
|
|
9
|
+
*/
|
|
3
10
|
export declare function executeGetRejectedList(serverImpl: PushCertificateManagerInternalContext): Promise<GetRejectedListResult>;
|
|
4
11
|
//# sourceMappingURL=get_rejected_list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_rejected_list.d.ts","sourceRoot":"","sources":["../../../source/server/push_certificate_manager/get_rejected_list.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,uBAAuB,CAAC;AAkCnF,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,qCAAqC,GAAG,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"get_rejected_list.d.ts","sourceRoot":"","sources":["../../../source/server/push_certificate_manager/get_rejected_list.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,uBAAuB,CAAC;AAkCnF;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,qCAAqC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAoB9H"}
|
|
@@ -25,11 +25,16 @@ async function extractRejectedList(group, certificateList) {
|
|
|
25
25
|
// Directory might not exist yet, ignore
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* ServerConfiguration.GetRejectedList "is a shortcut for the GetRejectedList
|
|
30
|
+
* Method on the DefaultApplicationGroup CertificateGroup" (OPC 10000-12
|
|
31
|
+
* §7.10.12), so only that group's rejected Certificates are returned. A
|
|
32
|
+
* rejected user token or HTTPS Certificate is not one a Client can move into
|
|
33
|
+
* the DefaultApplicationGroup TrustList.
|
|
34
|
+
*/
|
|
28
35
|
export async function executeGetRejectedList(serverImpl) {
|
|
29
36
|
const list = [];
|
|
30
37
|
await extractRejectedList(serverImpl.applicationGroup, list);
|
|
31
|
-
await extractRejectedList(serverImpl.userTokenGroup, list);
|
|
32
|
-
await extractRejectedList(serverImpl.httpsGroup, list);
|
|
33
38
|
// sort list from newer file to older file
|
|
34
39
|
list.sort((a, b) => b.stat.mtime.getTime() - a.stat.mtime.getTime());
|
|
35
40
|
const promises = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_rejected_list.js","sourceRoot":"","sources":["../../../source/server/push_certificate_manager/get_rejected_list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAWrD,KAAK,UAAU,mBAAmB,CAAC,KAAqC,EAAE,eAA2B;IACjG,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO;IACX,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aACjB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAAC,OAAO,IAAI,EAAE,CAAC;QACZ,wCAAwC;IAC5C,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAAiD;IAC1F,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,MAAM,mBAAmB,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"get_rejected_list.js","sourceRoot":"","sources":["../../../source/server/push_certificate_manager/get_rejected_list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAWrD,KAAK,UAAU,mBAAmB,CAAC,KAAqC,EAAE,eAA2B;IACjG,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO;IACX,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aACjB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAAC,OAAO,IAAI,EAAE,CAAC;QACZ,wCAAwC;IAC5C,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAAiD;IAC1F,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,MAAM,mBAAmB,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAE7D,0CAA0C;IAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzF,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,eAAe,GAAa,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAa,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEpE,OAAO;QACH,YAAY;QACZ,UAAU,EAAE,WAAW,CAAC,IAAI;KAC/B,CAAC;AACN,CAAC"}
|
package/dist/trust_list.d.ts
CHANGED
|
@@ -36,21 +36,19 @@ export interface ITrustList {
|
|
|
36
36
|
*
|
|
37
37
|
* If an invalid Certificate is found the Server shall return an error and shall not update the Trust List.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* The Method returns a validation error if the Certificate is issued by a CA and the
|
|
40
|
+
* Certificate for the issuer is not in the Trust List. Issuer Certificates cannot be added
|
|
41
|
+
* with this Method: they are written, with their CRLs, through Open/Write/CloseAndUpdate.
|
|
41
42
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* This method cannot be called if the file object is open
|
|
47
|
-
* @param certificate - The DER encoded Certificate to add as a ByteStrng
|
|
48
|
-
* @param isTrustedCerticopy ficate - If TRUE the Certificate is added to the Trusted Certificates List. If FALSE the Certificate is added to the Issuer Certificates List.
|
|
43
|
+
* This method cannot be called if the file object is open (OPC 10000-12 §7.8.2.6).
|
|
44
|
+
* @param certificate - The DER encoded Certificate to add as a ByteString
|
|
45
|
+
* @param isTrustedCertificate - If TRUE the Certificate is added to the Trusted Certificates List. If FALSE BadCertificateInvalid is returned.
|
|
49
46
|
*
|
|
50
47
|
* **Result Code**
|
|
51
48
|
* - BadUserAccessDenied: The current user does not have the rights required.
|
|
52
49
|
* - BadCertificateInvalid: The certificate to add is invalid.
|
|
53
|
-
* - BadInvalidState: The object is
|
|
50
|
+
* - BadInvalidState: The object is open for write and CloseAndUpdate has not been called.
|
|
51
|
+
* - BadNotWritable: The object is open for read only.
|
|
54
52
|
*
|
|
55
53
|
*/
|
|
56
54
|
addCertificate(certificate: Buffer, isTrustedCertificate: boolean): Promise<StatusCode>;
|
|
@@ -61,16 +59,18 @@ export interface ITrustList {
|
|
|
61
59
|
*
|
|
62
60
|
* If the Certificate is a CA Certificate with associated CRLs then all CRLs are removed as well.
|
|
63
61
|
*
|
|
64
|
-
* This method cannot be called if the file object is open.
|
|
62
|
+
* This method cannot be called if the file object is open (OPC 10000-12 §7.8.2.7).
|
|
65
63
|
*
|
|
66
64
|
* @param thumbprint - The SHA1 hash of the Certificate to remove
|
|
67
65
|
* @param isTrustedCertificate - If TRUE the Certificate is removed from the Trusted Certificates List.
|
|
68
66
|
* If FALSE the Certificate is removed from the Issuer Certificates List.
|
|
69
67
|
*
|
|
70
68
|
* **Result Code**
|
|
71
|
-
* -BadUserAccessDenied:
|
|
72
|
-
* -BadInvalidArgument:
|
|
73
|
-
* -
|
|
69
|
+
* -BadUserAccessDenied: The current user does not have the rights required.
|
|
70
|
+
* -BadInvalidArgument: The certificate to remove was not found.
|
|
71
|
+
* -BadCertificateChainIncomplete: The Certificate is needed to validate another Certificate in the Trust List.
|
|
72
|
+
* -BadInvalidState: The object is open for write and CloseAndUpdate has not been called.
|
|
73
|
+
* -BadNotWritable: The object is open for read only.
|
|
74
74
|
*
|
|
75
75
|
*
|
|
76
76
|
*/
|
package/dist/trust_list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust_list.d.ts","sourceRoot":"","sources":["../source/trust_list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,cAAc,CAEV,oBAAoB,EAAE,OAAO,GAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB
|
|
1
|
+
{"version":3,"file":"trust_list.d.ts","sourceRoot":"","sources":["../source/trust_list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,cAAc,CAEV,oBAAoB,EAAE,OAAO,GAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7F"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-server-configuration",
|
|
3
|
-
"version": "2.186.
|
|
3
|
+
"version": "2.186.14",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - module server-configuration",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsc -b",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"chalk": "6.0.1",
|
|
20
20
|
"memfs": "^4.79.0",
|
|
21
|
-
"node-opcua-address-space": "2.186.
|
|
21
|
+
"node-opcua-address-space": "2.186.14",
|
|
22
22
|
"node-opcua-address-space-base": "2.186.10",
|
|
23
23
|
"node-opcua-assert": "2.186.7",
|
|
24
24
|
"node-opcua-basic-types": "2.186.7",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
"node-opcua-crypto": "6.1.2",
|
|
30
30
|
"node-opcua-data-model": "2.186.10",
|
|
31
31
|
"node-opcua-debug": "2.186.7",
|
|
32
|
-
"node-opcua-file-transfer": "2.186.
|
|
32
|
+
"node-opcua-file-transfer": "2.186.14",
|
|
33
33
|
"node-opcua-hostname": "2.184.0",
|
|
34
34
|
"node-opcua-nodeid": "2.186.7",
|
|
35
35
|
"node-opcua-pki": "7.0.1",
|
|
36
|
-
"node-opcua-pseudo-session": "2.186.
|
|
37
|
-
"node-opcua-secure-channel": "2.186.
|
|
38
|
-
"node-opcua-server": "2.186.
|
|
36
|
+
"node-opcua-pseudo-session": "2.186.14",
|
|
37
|
+
"node-opcua-secure-channel": "2.186.14",
|
|
38
|
+
"node-opcua-server": "2.186.14",
|
|
39
39
|
"node-opcua-service-translate-browse-path": "2.186.10",
|
|
40
40
|
"node-opcua-status-code": "2.186.7",
|
|
41
41
|
"node-opcua-types": "2.186.10",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"bcryptjs": "3.0.3",
|
|
47
|
-
"node-opcua-client": "2.186.
|
|
47
|
+
"node-opcua-client": "2.186.14",
|
|
48
48
|
"node-opcua-data-value": "2.186.10",
|
|
49
49
|
"node-opcua-leak-detector": "2.186.7",
|
|
50
50
|
"node-opcua-nodesets": "2.185.0"
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"internet of things"
|
|
65
65
|
],
|
|
66
66
|
"homepage": "http://node-opcua.github.io/",
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "faa1ad65879893a681cd561ae616f0c403d6ba7a",
|
|
68
68
|
"files": [
|
|
69
69
|
"dist",
|
|
70
70
|
"source"
|
|
@@ -145,6 +145,8 @@ export interface PushCertificateManager {
|
|
|
145
145
|
|
|
146
146
|
/**
|
|
147
147
|
* GetRejectedList Method returns the list of Certificates that have been rejected by the Server.
|
|
148
|
+
* It is a shortcut for the GetRejectedList Method on the DefaultApplicationGroup CertificateGroup
|
|
149
|
+
* (OPC 10000-12 §7.10.12): Certificates rejected by the other CertificateGroups are not returned.
|
|
148
150
|
* No rules are defined for how the Server updates this list or how long a Certificate is kept in
|
|
149
151
|
* the list. It is recommended that every valid but untrusted Certificate be added to the rejected
|
|
150
152
|
* list as long as storage is available. Servers should omit older entries from the list returned if
|
|
@@ -101,19 +101,24 @@ export async function confirmTrust(cm: CertificateManager, list: ProvisionalList
|
|
|
101
101
|
* parsed is skipped with a warning rather than failing the caller.
|
|
102
102
|
*/
|
|
103
103
|
export async function leafThumbprintsIn(folder: string): Promise<string[]> {
|
|
104
|
+
return (await leafCertificatesIn(folder)).map((entry) => entry.thumbprint);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** The leaf certificate of each certificate file in a PKI folder, with its thumbprint, skipping what does not parse. */
|
|
108
|
+
export async function leafCertificatesIn(folder: string): Promise<{ thumbprint: string; certificate: Buffer }[]> {
|
|
104
109
|
if (!fs.existsSync(folder)) return [];
|
|
105
|
-
const
|
|
110
|
+
const entries: { thumbprint: string; certificate: Buffer }[] = [];
|
|
106
111
|
for (const file of await fs.promises.readdir(folder)) {
|
|
107
112
|
const ext = path.extname(file);
|
|
108
113
|
if (ext !== ".der" && ext !== ".pem") continue;
|
|
109
114
|
try {
|
|
110
115
|
const chain = await readCertificateChainAsync(path.join(folder, file));
|
|
111
|
-
if (chain.length > 0)
|
|
116
|
+
if (chain.length > 0) entries.push({ thumbprint: makeSHA1Thumbprint(chain[0]).toString("hex"), certificate: chain[0] });
|
|
112
117
|
} catch (err) {
|
|
113
118
|
warningLog(`[TrustList] skipping ${path.join(folder, file)}: not a certificate`, (err as Error).message);
|
|
114
119
|
}
|
|
115
120
|
}
|
|
116
|
-
return
|
|
121
|
+
return entries;
|
|
117
122
|
}
|
|
118
123
|
|
|
119
124
|
/** Whether the trusted list holds at least one certificate that was not trusted provisionally. */
|
|
@@ -21,7 +21,13 @@ import type {
|
|
|
21
21
|
} from "node-opcua-address-space";
|
|
22
22
|
import { BinaryStream } from "node-opcua-binary-stream";
|
|
23
23
|
import type { OPCUACertificateManager } from "node-opcua-certificate-manager";
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
exploreCertificate,
|
|
26
|
+
makeSHA1Thumbprint,
|
|
27
|
+
split_der,
|
|
28
|
+
verifyCertificateChain,
|
|
29
|
+
verifyCertificateSignature
|
|
30
|
+
} from "node-opcua-crypto/web";
|
|
25
31
|
import { AccessRestrictionsFlag } from "node-opcua-data-model";
|
|
26
32
|
import { checkDebugFlag, make_debugLog, make_errorLog, make_warningLog } from "node-opcua-debug";
|
|
27
33
|
import { type AbstractFs, installFileType, OpenFileMode } from "node-opcua-file-transfer";
|
|
@@ -29,7 +35,7 @@ import { VerificationStatus } from "node-opcua-pki";
|
|
|
29
35
|
import { type CallbackT, type StatusCode, StatusCodes } from "node-opcua-status-code";
|
|
30
36
|
import { type CallMethodResultOptions, TrustListDataType } from "node-opcua-types";
|
|
31
37
|
import { DataType, Variant } from "node-opcua-variant";
|
|
32
|
-
import { confirmTrust, isSharedTrustListStore, leafThumbprintsIn } from "./application_setup.js";
|
|
38
|
+
import { confirmTrust, isSharedTrustListStore, leafCertificatesIn, leafThumbprintsIn } from "./application_setup.js";
|
|
33
39
|
import type { PushCertificateManagerServerImpl } from "./push_certificate_manager_server_impl.js";
|
|
34
40
|
import { rolePermissionAdminOnly } from "./roles_and_permissions.js";
|
|
35
41
|
import { hasEncryptedChannel, hasExpectedUserAccess } from "./tools.js";
|
|
@@ -81,6 +87,57 @@ function trustListIsAlreadyOpened(trustList: UATrustList): boolean {
|
|
|
81
87
|
return openCount > 0;
|
|
82
88
|
}
|
|
83
89
|
|
|
90
|
+
/**
|
|
91
|
+
* AddCertificate and RemoveCertificate "cannot be called if the containing
|
|
92
|
+
* TrustList Object is open" (OPC 10000-12 §7.8.2.6, §7.8.2.7). Their result
|
|
93
|
+
* tables tell the two cases apart: open with write access is Bad_InvalidState,
|
|
94
|
+
* open for read only is Bad_NotWritable.
|
|
95
|
+
*/
|
|
96
|
+
function statusWhenOpen(trustList: UATrustListEx): StatusCode | undefined {
|
|
97
|
+
if (trustList.$$openedForWrite) {
|
|
98
|
+
return StatusCodes.BadInvalidState;
|
|
99
|
+
}
|
|
100
|
+
if (trustListIsAlreadyOpened(trustList)) {
|
|
101
|
+
return StatusCodes.BadNotWritable;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
type TrustListStore = "trusted" | "issuers";
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Whether removing `thumbprint` from `store` would leave another Certificate
|
|
110
|
+
* of the TrustList without an issuer able to validate it (§7.8.2.7:
|
|
111
|
+
* Bad_CertificateChainIncomplete). Both lists count, so an intermediate CA in
|
|
112
|
+
* the Issuer list keeps its root. A copy of the same CA kept in the other
|
|
113
|
+
* list, or another CA with the same key, still validates the child.
|
|
114
|
+
*/
|
|
115
|
+
async function isNeededToValidateAnother(
|
|
116
|
+
cm: OPCUACertificateManager,
|
|
117
|
+
store: TrustListStore,
|
|
118
|
+
thumbprint: string,
|
|
119
|
+
certificate: Buffer
|
|
120
|
+
): Promise<boolean> {
|
|
121
|
+
const entries = [
|
|
122
|
+
...(await leafCertificatesIn(cm.trustedFolder)).map((e) => ({ ...e, store: "trusted" })),
|
|
123
|
+
...(await leafCertificatesIn(cm.issuersCertFolder)).map((e) => ({ ...e, store: "issuers" }))
|
|
124
|
+
];
|
|
125
|
+
const remaining = entries.filter((e) => !(e.store === store && e.thumbprint === thumbprint));
|
|
126
|
+
const signedBy = (child: Buffer, issuer: Buffer) => {
|
|
127
|
+
try {
|
|
128
|
+
return verifyCertificateSignature(child, issuer);
|
|
129
|
+
} catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
return remaining.some(
|
|
134
|
+
(child) =>
|
|
135
|
+
child.thumbprint !== thumbprint &&
|
|
136
|
+
signedBy(child.certificate, certificate) &&
|
|
137
|
+
!remaining.some((other) => other.thumbprint !== child.thumbprint && signedBy(child.certificate, other.certificate))
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
84
141
|
/**
|
|
85
142
|
* Update the mandatory LastUpdateTime property whenever the trust list is modified.
|
|
86
143
|
* Per OPC UA Part 12 spec, this must be updated after AddCertificate, RemoveCertificate, or CloseAndUpdate.
|
|
@@ -536,8 +593,9 @@ async function _addCertificate(
|
|
|
536
593
|
if (!cm) {
|
|
537
594
|
return { statusCode: StatusCodes.BadInternalError };
|
|
538
595
|
}
|
|
539
|
-
|
|
540
|
-
|
|
596
|
+
const openStatus = statusWhenOpen(trustList);
|
|
597
|
+
if (openStatus) {
|
|
598
|
+
return { statusCode: openStatus };
|
|
541
599
|
}
|
|
542
600
|
|
|
543
601
|
const certificateBuffer: Buffer = inputArguments[0].value as Buffer;
|
|
@@ -593,8 +651,9 @@ async function _removeCertificate(
|
|
|
593
651
|
return { statusCode: StatusCodes.BadInternalError };
|
|
594
652
|
}
|
|
595
653
|
|
|
596
|
-
|
|
597
|
-
|
|
654
|
+
const openStatus = statusWhenOpen(trustList);
|
|
655
|
+
if (openStatus) {
|
|
656
|
+
return { statusCode: openStatus };
|
|
598
657
|
}
|
|
599
658
|
|
|
600
659
|
const thumbprint: string = inputArguments[0].value as string;
|
|
@@ -604,33 +663,28 @@ async function _removeCertificate(
|
|
|
604
663
|
// Normalize thumbprint - remove "NodeOPCUA[" prefix if present
|
|
605
664
|
const normalizedThumbprint = thumbprint.replace(/^NodeOPCUA\[|\]$/g, "").toLowerCase();
|
|
606
665
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
warningLog("Certificate is needed for chain validation");
|
|
627
|
-
return { statusCode: StatusCodes.BadCertificateChainIncomplete };
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
// Also remove CRLs issued by this CA
|
|
631
|
-
await cm.removeRevocationListsForIssuer(issuerCert, "issuers");
|
|
632
|
-
await confirmTrust(cm, "issuers", [normalizedThumbprint]);
|
|
666
|
+
// §7.8.2.7, the same rules for both lists: Bad_InvalidArgument when
|
|
667
|
+
// the thumbprint is not in the list, Bad_CertificateChainIncomplete
|
|
668
|
+
// when another Certificate still needs it, checked before anything is
|
|
669
|
+
// removed, and a CA's CRLs leave with it.
|
|
670
|
+
const store: TrustListStore = isTrustedCertificate ? "trusted" : "issuers";
|
|
671
|
+
const folder = isTrustedCertificate ? cm.trustedFolder : cm.issuersCertFolder;
|
|
672
|
+
const certificate = (await leafCertificatesIn(folder)).find((e) => e.thumbprint === normalizedThumbprint)?.certificate;
|
|
673
|
+
if (!certificate) {
|
|
674
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
675
|
+
}
|
|
676
|
+
if (await isNeededToValidateAnother(cm, store, normalizedThumbprint, certificate)) {
|
|
677
|
+
warningLog("Certificate is needed for chain validation");
|
|
678
|
+
return { statusCode: StatusCodes.BadCertificateChainIncomplete };
|
|
679
|
+
}
|
|
680
|
+
const removed = isTrustedCertificate
|
|
681
|
+
? await cm.removeTrustedCertificate(normalizedThumbprint)
|
|
682
|
+
: await cm.removeIssuer(normalizedThumbprint);
|
|
683
|
+
if (!removed) {
|
|
684
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
633
685
|
}
|
|
686
|
+
await cm.removeRevocationListsForIssuer(certificate, store);
|
|
687
|
+
await confirmTrust(cm, store, [normalizedThumbprint]);
|
|
634
688
|
|
|
635
689
|
updateLastUpdateTime(trustList);
|
|
636
690
|
emitTrustListUpdated(trustList);
|
|
@@ -38,12 +38,17 @@ async function extractRejectedList(group: CertificateManager | undefined, certif
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
/**
|
|
42
|
+
* ServerConfiguration.GetRejectedList "is a shortcut for the GetRejectedList
|
|
43
|
+
* Method on the DefaultApplicationGroup CertificateGroup" (OPC 10000-12
|
|
44
|
+
* §7.10.12), so only that group's rejected Certificates are returned. A
|
|
45
|
+
* rejected user token or HTTPS Certificate is not one a Client can move into
|
|
46
|
+
* the DefaultApplicationGroup TrustList.
|
|
47
|
+
*/
|
|
41
48
|
export async function executeGetRejectedList(serverImpl: PushCertificateManagerInternalContext): Promise<GetRejectedListResult> {
|
|
42
49
|
const list: FileData[] = [];
|
|
43
50
|
|
|
44
51
|
await extractRejectedList(serverImpl.applicationGroup, list);
|
|
45
|
-
await extractRejectedList(serverImpl.userTokenGroup, list);
|
|
46
|
-
await extractRejectedList(serverImpl.httpsGroup, list);
|
|
47
52
|
|
|
48
53
|
// sort list from newer file to older file
|
|
49
54
|
list.sort((a: FileData, b: FileData) => b.stat.mtime.getTime() - a.stat.mtime.getTime());
|
package/source/trust_list.ts
CHANGED
|
@@ -41,21 +41,19 @@ export interface ITrustList {
|
|
|
41
41
|
*
|
|
42
42
|
* If an invalid Certificate is found the Server shall return an error and shall not update the Trust List.
|
|
43
43
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
44
|
+
* The Method returns a validation error if the Certificate is issued by a CA and the
|
|
45
|
+
* Certificate for the issuer is not in the Trust List. Issuer Certificates cannot be added
|
|
46
|
+
* with this Method: they are written, with their CRLs, through Open/Write/CloseAndUpdate.
|
|
46
47
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* This method cannot be called if the file object is open
|
|
52
|
-
* @param certificate - The DER encoded Certificate to add as a ByteStrng
|
|
53
|
-
* @param isTrustedCerticopy ficate - If TRUE the Certificate is added to the Trusted Certificates List. If FALSE the Certificate is added to the Issuer Certificates List.
|
|
48
|
+
* This method cannot be called if the file object is open (OPC 10000-12 §7.8.2.6).
|
|
49
|
+
* @param certificate - The DER encoded Certificate to add as a ByteString
|
|
50
|
+
* @param isTrustedCertificate - If TRUE the Certificate is added to the Trusted Certificates List. If FALSE BadCertificateInvalid is returned.
|
|
54
51
|
*
|
|
55
52
|
* **Result Code**
|
|
56
53
|
* - BadUserAccessDenied: The current user does not have the rights required.
|
|
57
54
|
* - BadCertificateInvalid: The certificate to add is invalid.
|
|
58
|
-
* - BadInvalidState: The object is
|
|
55
|
+
* - BadInvalidState: The object is open for write and CloseAndUpdate has not been called.
|
|
56
|
+
* - BadNotWritable: The object is open for read only.
|
|
59
57
|
*
|
|
60
58
|
*/
|
|
61
59
|
addCertificate(certificate: Buffer, isTrustedCertificate: boolean): Promise<StatusCode>;
|
|
@@ -67,16 +65,18 @@ export interface ITrustList {
|
|
|
67
65
|
*
|
|
68
66
|
* If the Certificate is a CA Certificate with associated CRLs then all CRLs are removed as well.
|
|
69
67
|
*
|
|
70
|
-
* This method cannot be called if the file object is open.
|
|
68
|
+
* This method cannot be called if the file object is open (OPC 10000-12 §7.8.2.7).
|
|
71
69
|
*
|
|
72
70
|
* @param thumbprint - The SHA1 hash of the Certificate to remove
|
|
73
71
|
* @param isTrustedCertificate - If TRUE the Certificate is removed from the Trusted Certificates List.
|
|
74
72
|
* If FALSE the Certificate is removed from the Issuer Certificates List.
|
|
75
73
|
*
|
|
76
74
|
* **Result Code**
|
|
77
|
-
* -BadUserAccessDenied:
|
|
78
|
-
* -BadInvalidArgument:
|
|
79
|
-
* -
|
|
75
|
+
* -BadUserAccessDenied: The current user does not have the rights required.
|
|
76
|
+
* -BadInvalidArgument: The certificate to remove was not found.
|
|
77
|
+
* -BadCertificateChainIncomplete: The Certificate is needed to validate another Certificate in the Trust List.
|
|
78
|
+
* -BadInvalidState: The object is open for write and CloseAndUpdate has not been called.
|
|
79
|
+
* -BadNotWritable: The object is open for read only.
|
|
80
80
|
*
|
|
81
81
|
*
|
|
82
82
|
*/
|