node-opcua-server-configuration 2.186.13 → 2.186.15
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 +73 -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 +14 -14
- package/source/push_certificate_manager.ts +2 -0
- package/source/server/application_setup.ts +8 -3
- package/source/server/promote_trust_list.ts +89 -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;AAosBlC,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,49 @@ 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. So does
|
|
80
|
+
* the child itself when it is self-signed: two self-signed Certificates
|
|
81
|
+
* sharing one key (a renewed Certificate next to the one it replaces) verify
|
|
82
|
+
* each other's signature, yet neither needs the other.
|
|
83
|
+
*/
|
|
84
|
+
async function isNeededToValidateAnother(cm, store, thumbprint, certificate) {
|
|
85
|
+
const entries = [
|
|
86
|
+
...(await leafCertificatesIn(cm.trustedFolder)).map((e) => ({ ...e, store: "trusted" })),
|
|
87
|
+
...(await leafCertificatesIn(cm.issuersCertFolder)).map((e) => ({ ...e, store: "issuers" }))
|
|
88
|
+
];
|
|
89
|
+
const remaining = entries.filter((e) => !(e.store === store && e.thumbprint === thumbprint));
|
|
90
|
+
const signedBy = (child, issuer) => {
|
|
91
|
+
try {
|
|
92
|
+
return verifyCertificateSignature(child, issuer);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return remaining.some((child) => child.thumbprint !== thumbprint &&
|
|
99
|
+
signedBy(child.certificate, certificate) &&
|
|
100
|
+
!remaining.some((other) => signedBy(child.certificate, other.certificate)));
|
|
101
|
+
}
|
|
59
102
|
/**
|
|
60
103
|
* Update the mandatory LastUpdateTime property whenever the trust list is modified.
|
|
61
104
|
* Per OPC UA Part 12 spec, this must be updated after AddCertificate, RemoveCertificate, or CloseAndUpdate.
|
|
@@ -453,8 +496,9 @@ async function _addCertificate(inputArguments, context) {
|
|
|
453
496
|
if (!cm) {
|
|
454
497
|
return { statusCode: StatusCodes.BadInternalError };
|
|
455
498
|
}
|
|
456
|
-
|
|
457
|
-
|
|
499
|
+
const openStatus = statusWhenOpen(trustList);
|
|
500
|
+
if (openStatus) {
|
|
501
|
+
return { statusCode: openStatus };
|
|
458
502
|
}
|
|
459
503
|
const certificateBuffer = inputArguments[0].value;
|
|
460
504
|
const isTrustedCertificate = inputArguments[1].value;
|
|
@@ -496,40 +540,37 @@ async function _removeCertificate(inputArguments, context) {
|
|
|
496
540
|
if (!cm) {
|
|
497
541
|
return { statusCode: StatusCodes.BadInternalError };
|
|
498
542
|
}
|
|
499
|
-
|
|
500
|
-
|
|
543
|
+
const openStatus = statusWhenOpen(trustList);
|
|
544
|
+
if (openStatus) {
|
|
545
|
+
return { statusCode: openStatus };
|
|
501
546
|
}
|
|
502
547
|
const thumbprint = inputArguments[0].value;
|
|
503
548
|
const isTrustedCertificate = inputArguments[1].value;
|
|
504
549
|
try {
|
|
505
550
|
// Normalize thumbprint - remove "NodeOPCUA[" prefix if present
|
|
506
551
|
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
|
-
}
|
|
552
|
+
// §7.8.2.7, the same rules for both lists: Bad_InvalidArgument when
|
|
553
|
+
// the thumbprint is not in the list, Bad_CertificateChainIncomplete
|
|
554
|
+
// when another Certificate still needs it, checked before anything is
|
|
555
|
+
// removed, and a CA's CRLs leave with it.
|
|
556
|
+
const store = isTrustedCertificate ? "trusted" : "issuers";
|
|
557
|
+
const folder = isTrustedCertificate ? cm.trustedFolder : cm.issuersCertFolder;
|
|
558
|
+
const certificate = (await leafCertificatesIn(folder)).find((e) => e.thumbprint === normalizedThumbprint)?.certificate;
|
|
559
|
+
if (!certificate) {
|
|
560
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
561
|
+
}
|
|
562
|
+
if (await isNeededToValidateAnother(cm, store, normalizedThumbprint, certificate)) {
|
|
563
|
+
warningLog("Certificate is needed for chain validation");
|
|
564
|
+
return { statusCode: StatusCodes.BadCertificateChainIncomplete };
|
|
565
|
+
}
|
|
566
|
+
const removed = isTrustedCertificate
|
|
567
|
+
? await cm.removeTrustedCertificate(normalizedThumbprint)
|
|
568
|
+
: await cm.removeIssuer(normalizedThumbprint);
|
|
569
|
+
if (!removed) {
|
|
570
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
571
|
+
}
|
|
572
|
+
await cm.removeRevocationListsForIssuer(certificate, store);
|
|
573
|
+
await confirmTrust(cm, store, [normalizedThumbprint]);
|
|
533
574
|
updateLastUpdateTime(trustList);
|
|
534
575
|
emitTrustListUpdated(trustList);
|
|
535
576
|
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.15",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - module server-configuration",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsc -b",
|
|
@@ -17,25 +17,25 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"chalk": "6.0.1",
|
|
20
|
-
"memfs": "^4.
|
|
21
|
-
"node-opcua-address-space": "2.186.
|
|
22
|
-
"node-opcua-address-space-base": "2.186.
|
|
20
|
+
"memfs": "^4.80.0",
|
|
21
|
+
"node-opcua-address-space": "2.186.15",
|
|
22
|
+
"node-opcua-address-space-base": "2.186.15",
|
|
23
23
|
"node-opcua-assert": "2.186.7",
|
|
24
24
|
"node-opcua-basic-types": "2.186.7",
|
|
25
25
|
"node-opcua-binary-stream": "2.186.7",
|
|
26
|
-
"node-opcua-certificate-manager": "2.186.
|
|
27
|
-
"node-opcua-common": "2.186.
|
|
26
|
+
"node-opcua-certificate-manager": "2.186.15",
|
|
27
|
+
"node-opcua-common": "2.186.15",
|
|
28
28
|
"node-opcua-constants": "2.185.0",
|
|
29
|
-
"node-opcua-crypto": "6.1.
|
|
29
|
+
"node-opcua-crypto": "6.1.3",
|
|
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.15",
|
|
33
33
|
"node-opcua-hostname": "2.184.0",
|
|
34
34
|
"node-opcua-nodeid": "2.186.7",
|
|
35
|
-
"node-opcua-pki": "7.0.
|
|
36
|
-
"node-opcua-pseudo-session": "2.186.
|
|
37
|
-
"node-opcua-secure-channel": "2.186.
|
|
38
|
-
"node-opcua-server": "2.186.
|
|
35
|
+
"node-opcua-pki": "7.0.3",
|
|
36
|
+
"node-opcua-pseudo-session": "2.186.15",
|
|
37
|
+
"node-opcua-secure-channel": "2.186.15",
|
|
38
|
+
"node-opcua-server": "2.186.15",
|
|
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.15",
|
|
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": "da786c602532ed15e4c0a47aa55296f2cdc454c3",
|
|
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,60 @@ 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. So does
|
|
114
|
+
* the child itself when it is self-signed: two self-signed Certificates
|
|
115
|
+
* sharing one key (a renewed Certificate next to the one it replaces) verify
|
|
116
|
+
* each other's signature, yet neither needs the other.
|
|
117
|
+
*/
|
|
118
|
+
async function isNeededToValidateAnother(
|
|
119
|
+
cm: OPCUACertificateManager,
|
|
120
|
+
store: TrustListStore,
|
|
121
|
+
thumbprint: string,
|
|
122
|
+
certificate: Buffer
|
|
123
|
+
): Promise<boolean> {
|
|
124
|
+
const entries = [
|
|
125
|
+
...(await leafCertificatesIn(cm.trustedFolder)).map((e) => ({ ...e, store: "trusted" })),
|
|
126
|
+
...(await leafCertificatesIn(cm.issuersCertFolder)).map((e) => ({ ...e, store: "issuers" }))
|
|
127
|
+
];
|
|
128
|
+
const remaining = entries.filter((e) => !(e.store === store && e.thumbprint === thumbprint));
|
|
129
|
+
const signedBy = (child: Buffer, issuer: Buffer) => {
|
|
130
|
+
try {
|
|
131
|
+
return verifyCertificateSignature(child, issuer);
|
|
132
|
+
} catch {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
return remaining.some(
|
|
137
|
+
(child) =>
|
|
138
|
+
child.thumbprint !== thumbprint &&
|
|
139
|
+
signedBy(child.certificate, certificate) &&
|
|
140
|
+
!remaining.some((other) => signedBy(child.certificate, other.certificate))
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
84
144
|
/**
|
|
85
145
|
* Update the mandatory LastUpdateTime property whenever the trust list is modified.
|
|
86
146
|
* Per OPC UA Part 12 spec, this must be updated after AddCertificate, RemoveCertificate, or CloseAndUpdate.
|
|
@@ -536,8 +596,9 @@ async function _addCertificate(
|
|
|
536
596
|
if (!cm) {
|
|
537
597
|
return { statusCode: StatusCodes.BadInternalError };
|
|
538
598
|
}
|
|
539
|
-
|
|
540
|
-
|
|
599
|
+
const openStatus = statusWhenOpen(trustList);
|
|
600
|
+
if (openStatus) {
|
|
601
|
+
return { statusCode: openStatus };
|
|
541
602
|
}
|
|
542
603
|
|
|
543
604
|
const certificateBuffer: Buffer = inputArguments[0].value as Buffer;
|
|
@@ -593,8 +654,9 @@ async function _removeCertificate(
|
|
|
593
654
|
return { statusCode: StatusCodes.BadInternalError };
|
|
594
655
|
}
|
|
595
656
|
|
|
596
|
-
|
|
597
|
-
|
|
657
|
+
const openStatus = statusWhenOpen(trustList);
|
|
658
|
+
if (openStatus) {
|
|
659
|
+
return { statusCode: openStatus };
|
|
598
660
|
}
|
|
599
661
|
|
|
600
662
|
const thumbprint: string = inputArguments[0].value as string;
|
|
@@ -604,33 +666,28 @@ async function _removeCertificate(
|
|
|
604
666
|
// Normalize thumbprint - remove "NodeOPCUA[" prefix if present
|
|
605
667
|
const normalizedThumbprint = thumbprint.replace(/^NodeOPCUA\[|\]$/g, "").toLowerCase();
|
|
606
668
|
|
|
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]);
|
|
669
|
+
// §7.8.2.7, the same rules for both lists: Bad_InvalidArgument when
|
|
670
|
+
// the thumbprint is not in the list, Bad_CertificateChainIncomplete
|
|
671
|
+
// when another Certificate still needs it, checked before anything is
|
|
672
|
+
// removed, and a CA's CRLs leave with it.
|
|
673
|
+
const store: TrustListStore = isTrustedCertificate ? "trusted" : "issuers";
|
|
674
|
+
const folder = isTrustedCertificate ? cm.trustedFolder : cm.issuersCertFolder;
|
|
675
|
+
const certificate = (await leafCertificatesIn(folder)).find((e) => e.thumbprint === normalizedThumbprint)?.certificate;
|
|
676
|
+
if (!certificate) {
|
|
677
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
678
|
+
}
|
|
679
|
+
if (await isNeededToValidateAnother(cm, store, normalizedThumbprint, certificate)) {
|
|
680
|
+
warningLog("Certificate is needed for chain validation");
|
|
681
|
+
return { statusCode: StatusCodes.BadCertificateChainIncomplete };
|
|
682
|
+
}
|
|
683
|
+
const removed = isTrustedCertificate
|
|
684
|
+
? await cm.removeTrustedCertificate(normalizedThumbprint)
|
|
685
|
+
: await cm.removeIssuer(normalizedThumbprint);
|
|
686
|
+
if (!removed) {
|
|
687
|
+
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
633
688
|
}
|
|
689
|
+
await cm.removeRevocationListsForIssuer(certificate, store);
|
|
690
|
+
await confirmTrust(cm, store, [normalizedThumbprint]);
|
|
634
691
|
|
|
635
692
|
updateLastUpdateTime(trustList);
|
|
636
693
|
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
|
*/
|