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.
@@ -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;;;;;;;;;;;;;;OAcG;IAEH,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;CACtE"}
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,CAczE;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"}
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 thumbprints = [];
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
- thumbprints.push(makeSHA1Thumbprint(chain[0]).toString("hex"));
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 thumbprints;
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":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,UAAU,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAEtD,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAK7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAmC,CAAC;AAE/D,MAAM,GAAG,GAAG,CAAC,IAAqB,EAAE,UAAkB,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,EAAE,CAAC;AAEnF,SAAS,UAAU,CAAC,EAAsB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,IAAI,CAAC,EAAsB;IAChC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAa,EAAE,CAAC;gBACxE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,qEAAqE;QACrE,mEAAmE;QACnE,iEAAiE;QACjE,QAAQ,CACJ,kCAAkC,IAAI,8EAA8E,EACnH,GAAa,CAAC,OAAO,CACzB,CAAC;IACN,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,EAAsB,EAAE,MAAmB;IAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO;IACX,CAAC;IACD,oEAAoE;IACpE,gEAAgE;IAChE,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,kHAAkH;AAClH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAsB,EAAE,IAAqB,EAAE,UAAkB;IAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAsB,EAAE,IAAqB,EAAE,WAAqB;IACnG,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,OAAO,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;YAAE,SAAS;QAC/C,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAC7G,CAAC;IACL,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAsB;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,MAAM,iBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACrH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAAsB;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,MAAM,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAAE,SAAS,EAAE,CAAC;IACvF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,EAAE,CAAC,iCAAiC,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,SAAS,EAAE,CAAC;QAChB,CAAC;IACL,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvB,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,qEAAqE;AAErE,MAAM,YAAY,GAAG,IAAI,OAAO,EAAsB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,CAAqB,EAAE,CAAqB;IACjF,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAsB;IACzD,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC"}
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;AA2oBlC,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,WAAW,iBAiL5D;AAED,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,UAAU,GAAG,QAAQ,QAKnF"}
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
- if (trustListIsAlreadyOpened(trustList) || trustList.$$openedForWrite) {
457
- return { statusCode: StatusCodes.BadInvalidState };
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
- if (trustListIsAlreadyOpened(trustList) || trustList.$$openedForWrite) {
500
- return { statusCode: StatusCodes.BadInvalidState };
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
- if (isTrustedCertificate) {
508
- // Remove from trusted store
509
- const removed = await cm.removeTrustedCertificate(normalizedThumbprint);
510
- if (!removed) {
511
- return { statusCode: StatusCodes.BadInvalidArgument };
512
- }
513
- await confirmTrust(cm, "trusted", [normalizedThumbprint]);
514
- }
515
- else {
516
- // Removing an issuer certificate — first check if it's still
517
- // needed by any trusted certificate
518
- const issuerCert = await cm.removeIssuer(normalizedThumbprint);
519
- if (!issuerCert) {
520
- return { statusCode: StatusCodes.BadInvalidArgument };
521
- }
522
- // Check dependency: is any trusted cert signed by this issuer?
523
- if (await cm.isIssuerInUseByTrustedCertificate(issuerCert)) {
524
- // Re-add the issuer since we can't remove it
525
- await cm.addIssuer(issuerCert);
526
- warningLog("Certificate is needed for chain validation");
527
- return { statusCode: StatusCodes.BadCertificateChainIncomplete };
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,CAsB9H"}
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;IAC7D,MAAM,mBAAmB,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,mBAAmB,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEvD,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"}
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"}
@@ -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
- * If the Certificate is issued by a CA then the Client shall provide the entire chain in the
40
- * certificate argument (see Part 6).
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
- * After validating the Certificate, the Server shall add the CA Certificates to the Issuers list in the Trust List.
43
- *
44
- * The leaf Certificate is added to the list specified by the isTrustedCertificate argument.
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 opened.
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: The current user does not have the rights required.
72
- * -BadInvalidArgument: The certificate to remove was not found.
73
- * -BadInvalidState: The object is opened.
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
  */
@@ -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;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7F"}
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.13",
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.12",
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.13",
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.12",
37
- "node-opcua-secure-channel": "2.186.12",
38
- "node-opcua-server": "2.186.13",
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.12",
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": "5708e870e13433f9b98eaf7593924a8a265bb753",
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 thumbprints: string[] = [];
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) thumbprints.push(makeSHA1Thumbprint(chain[0]).toString("hex"));
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 thumbprints;
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 { exploreCertificate, makeSHA1Thumbprint, split_der, verifyCertificateChain } from "node-opcua-crypto/web";
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
- if (trustListIsAlreadyOpened(trustList) || trustList.$$openedForWrite) {
540
- return { statusCode: StatusCodes.BadInvalidState };
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
- if (trustListIsAlreadyOpened(trustList) || trustList.$$openedForWrite) {
597
- return { statusCode: StatusCodes.BadInvalidState };
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
- if (isTrustedCertificate) {
608
- // Remove from trusted store
609
- const removed = await cm.removeTrustedCertificate(normalizedThumbprint);
610
- if (!removed) {
611
- return { statusCode: StatusCodes.BadInvalidArgument };
612
- }
613
- await confirmTrust(cm, "trusted", [normalizedThumbprint]);
614
- } else {
615
- // Removing an issuer certificate — first check if it's still
616
- // needed by any trusted certificate
617
- const issuerCert = await cm.removeIssuer(normalizedThumbprint);
618
- if (!issuerCert) {
619
- return { statusCode: StatusCodes.BadInvalidArgument };
620
- }
621
-
622
- // Check dependency: is any trusted cert signed by this issuer?
623
- if (await cm.isIssuerInUseByTrustedCertificate(issuerCert)) {
624
- // Re-add the issuer since we can't remove it
625
- await cm.addIssuer(issuerCert);
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());
@@ -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
- * If the Certificate is issued by a CA then the Client shall provide the entire chain in the
45
- * certificate argument (see Part 6).
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
- * After validating the Certificate, the Server shall add the CA Certificates to the Issuers list in the Trust List.
48
- *
49
- * The leaf Certificate is added to the list specified by the isTrustedCertificate argument.
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 opened.
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: The current user does not have the rights required.
78
- * -BadInvalidArgument: The certificate to remove was not found.
79
- * -BadInvalidState: The object is opened.
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
  */