node-opcua-pki 3.1.0 → 3.1.2

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.
@@ -57,6 +57,7 @@ export declare enum VerificationStatus {
57
57
  /** Validation OK. */
58
58
  Good = "Good"
59
59
  }
60
+ export declare function findIssuerCertificateInChain(certificate: Certificate, chain: Certificate[]): Certificate | null;
60
61
  export declare enum CertificateManagerState {
61
62
  Uninitialized = 0,
62
63
  Initializing = 1,
@@ -122,6 +123,20 @@ export declare class CertificateManager {
122
123
  createCertificateRequest(params: CreateSelfSignCertificateParam, callback: (err: Error | null, certificateSigningRequestFilename?: string) => void): void;
123
124
  addIssuer(certificate: DER, validate?: boolean, addInTrustList?: boolean): Promise<VerificationStatus>;
124
125
  addRevocationList(crl: CertificateRevocationList): Promise<VerificationStatus>;
126
+ /**
127
+ * find the issuer certificate among the trusted issuer certificates.
128
+ *
129
+ * The findIssuerCertificate method is an asynchronous method that attempts to find
130
+ * the issuer certificate for a given certificate from the list of issuer certificate declared in the PKI
131
+ *
132
+ * - If the certificate is self-signed, it returns the certificate itself.
133
+ *
134
+ * - If the certificate has no extension 3, it is assumed to be generated by an old system, and a null value is returned.
135
+ *
136
+ * - the method checks both issuer and trusted certificates and returns the appropriate issuercertificate,
137
+ * if found. If multiple matching certificates are found, a warning is logged to the console.
138
+ *
139
+ */
125
140
  findIssuerCertificate(certificate: Certificate): Promise<Certificate | null>;
126
141
  /**
127
142
  * @internal
@@ -33,7 +33,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
33
33
  });
34
34
  };
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.CertificateManager = exports.CertificateManagerState = exports.VerificationStatus = void 0;
36
+ exports.CertificateManager = exports.CertificateManagerState = exports.findIssuerCertificateInChain = exports.VerificationStatus = void 0;
37
37
  const assert = require("assert");
38
38
  const async = require("async");
39
39
  const chalk = require("chalk");
@@ -120,6 +120,39 @@ function isSelfSigned3(certificate) {
120
120
  const info = (0, node_opcua_crypto_1.exploreCertificate)(certificate);
121
121
  return isSelfSigned2(info);
122
122
  }
123
+ function findIssuerCertificateInChain(certificate, chain) {
124
+ var _a, _b;
125
+ if (!certificate) {
126
+ return null;
127
+ }
128
+ const certInfo = (0, node_opcua_crypto_1.exploreCertificate)(certificate);
129
+ // istanbul ignore next
130
+ if (isSelfSigned2(certInfo)) {
131
+ // the certificate is self signed so is it's own issuer.
132
+ return certificate;
133
+ }
134
+ const wantedIssuerKey = (_b = (_a = certInfo.tbsCertificate.extensions) === null || _a === void 0 ? void 0 : _a.authorityKeyIdentifier) === null || _b === void 0 ? void 0 : _b.keyIdentifier;
135
+ // istanbul ignore next
136
+ if (!wantedIssuerKey) {
137
+ // Certificate has no extension 3 ! the certificate might have been generated by an old system
138
+ (0, toolbox_1.debugLog)("Certificate has no extension 3");
139
+ return null;
140
+ }
141
+ const potentialIssuers = chain.filter((c) => {
142
+ const info = (0, node_opcua_crypto_1.exploreCertificate)(c);
143
+ return info.tbsCertificate.extensions && info.tbsCertificate.extensions.subjectKeyIdentifier === wantedIssuerKey;
144
+ return true;
145
+ });
146
+ if (potentialIssuers.length === 1) {
147
+ return potentialIssuers[0];
148
+ }
149
+ if (potentialIssuers.length > 1) {
150
+ (0, toolbox_1.debugLog)("findIssuerCertificateInChain: certificate is not self-signed but has several issuers");
151
+ return potentialIssuers[0];
152
+ }
153
+ return null;
154
+ }
155
+ exports.findIssuerCertificateInChain = findIssuerCertificateInChain;
123
156
  var CertificateManagerState;
124
157
  (function (CertificateManagerState) {
125
158
  CertificateManagerState[CertificateManagerState["Uninitialized"] = 0] = "Uninitialized";
@@ -258,7 +291,7 @@ class CertificateManager {
258
291
  });
259
292
  }
260
293
  _innerVerifyCertificateAsync(certificate, isIssuer, level) {
261
- var _a, _b;
294
+ var _a, _b, _c, _d, _e;
262
295
  return __awaiter(this, void 0, void 0, function* () {
263
296
  if (level >= 5) {
264
297
  // maximum level of certificate in chain reached !
@@ -277,12 +310,20 @@ class CertificateManager {
277
310
  const isSelfSigned = isSelfSigned2(info);
278
311
  (0, toolbox_1.debugLog)("Is the Certificate self-signed ?", isSelfSigned);
279
312
  if (!isSelfSigned) {
280
- const issuerCertificate = yield this.findIssuerCertificate(chain[0]);
281
- // console.log("issuer is found", !!issuerCertificate, info.tbsCertificate.extensions.subjectKeyIdentifier, info.tbsCertificate.extensions?.authorityKeyIdentifier?.keyIdentifier);
313
+ (0, toolbox_1.debugLog)("Is issuer found in the list of know issuers ?", "\n subjectKeyIdentifier = ", (_c = info.tbsCertificate.extensions) === null || _c === void 0 ? void 0 : _c.subjectKeyIdentifier, "\n authorityKeyIdentifier = ", (_e = (_d = info.tbsCertificate.extensions) === null || _d === void 0 ? void 0 : _d.authorityKeyIdentifier) === null || _e === void 0 ? void 0 : _e.keyIdentifier);
314
+ let issuerCertificate = yield this.findIssuerCertificate(chain[0]);
282
315
  if (!issuerCertificate) {
283
- // if the certificate is not self-signed we ust have a issuer.
284
- // but no Issuer is not found
285
- return VerificationStatus.BadCertificateChainIncomplete;
316
+ // the issuer has not been found in the list of trusted certificate
317
+ // may be the issuer certificate is in the chain itself ?
318
+ issuerCertificate = findIssuerCertificateInChain(chain[0], chain);
319
+ if (!issuerCertificate) {
320
+ (0, toolbox_1.debugLog)(" the issuer has not been found in the chain itself nor in the issuer.cert list => the chain is incomplete!");
321
+ return VerificationStatus.BadCertificateChainIncomplete;
322
+ }
323
+ (0, toolbox_1.debugLog)(" the issuer certificate has been found in the chain itself ! the chain is complete !");
324
+ }
325
+ else {
326
+ (0, toolbox_1.debugLog)(" the issuer certificate has been found in the issuer.cert folder !");
286
327
  }
287
328
  const issuerStatus = yield this._innerVerifyCertificateAsync(issuerCertificate, true, level + 1);
288
329
  if (issuerStatus === VerificationStatus.BadCertificateRevocationUnknown) {
@@ -297,6 +338,10 @@ class CertificateManager {
297
338
  // the issuer must have valid dates ....
298
339
  return VerificationStatus.BadCertificateIssuerTimeInvalid;
299
340
  }
341
+ if (issuerStatus == VerificationStatus.BadCertificateUntrusted) {
342
+ (0, toolbox_1.debugLog)("warning issuerStatus = ", issuerStatus.toString(), "the issuer certificate is not trusted");
343
+ // return VerificationStatus.BadSecurityChecksFailed;
344
+ }
300
345
  if (issuerStatus !== VerificationStatus.Good && issuerStatus !== VerificationStatus.BadCertificateUntrusted) {
301
346
  // if the issuer has other issue => let's drop!
302
347
  return VerificationStatus.BadSecurityChecksFailed;
@@ -304,7 +349,7 @@ class CertificateManager {
304
349
  // verify that certificate was signed by issuer
305
350
  const isCertificateSignatureOK = (0, node_opcua_crypto_1.verifyCertificateSignature)(certificate, issuerCertificate);
306
351
  if (!isCertificateSignatureOK) {
307
- // the certificate was not signed by the issuer as it claim to be ! Danger
352
+ (0, toolbox_1.debugLog)(" the certificate was not signed by the issuer as it claim to be ! Danger");
308
353
  return VerificationStatus.BadSecurityChecksFailed;
309
354
  }
310
355
  hasValidIssuer = true;
@@ -585,7 +630,20 @@ class CertificateManager {
585
630
  }));
586
631
  });
587
632
  }
588
- // find the issuer certificate
633
+ /**
634
+ * find the issuer certificate among the trusted issuer certificates.
635
+ *
636
+ * The findIssuerCertificate method is an asynchronous method that attempts to find
637
+ * the issuer certificate for a given certificate from the list of issuer certificate declared in the PKI
638
+ *
639
+ * - If the certificate is self-signed, it returns the certificate itself.
640
+ *
641
+ * - If the certificate has no extension 3, it is assumed to be generated by an old system, and a null value is returned.
642
+ *
643
+ * - the method checks both issuer and trusted certificates and returns the appropriate issuercertificate,
644
+ * if found. If multiple matching certificates are found, a warning is logged to the console.
645
+ *
646
+ */
589
647
  findIssuerCertificate(certificate) {
590
648
  var _a, _b;
591
649
  return __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"certificate_manager.js","sourceRoot":"","sources":["../../lib/pki/certificate_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"certificate_manager.js","sourceRoot":"","sources":["../../lib/pki/certificate_manager.ts"],"names":[],"mappings":"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"}
@@ -203,6 +203,41 @@ function isSelfSigned3(certificate: Buffer): boolean {
203
203
  return isSelfSigned2(info);
204
204
  }
205
205
 
206
+ export function findIssuerCertificateInChain(certificate: Certificate, chain: Certificate[]): Certificate | null {
207
+ if (!certificate) {
208
+ return null;
209
+ }
210
+ const certInfo = exploreCertificate(certificate);
211
+
212
+ // istanbul ignore next
213
+ if (isSelfSigned2(certInfo)) {
214
+ // the certificate is self signed so is it's own issuer.
215
+ return certificate;
216
+ }
217
+ const wantedIssuerKey = certInfo.tbsCertificate.extensions?.authorityKeyIdentifier?.keyIdentifier;
218
+
219
+ // istanbul ignore next
220
+ if (!wantedIssuerKey) {
221
+ // Certificate has no extension 3 ! the certificate might have been generated by an old system
222
+ debugLog("Certificate has no extension 3");
223
+ return null;
224
+ }
225
+ const potentialIssuers = chain.filter((c) => {
226
+ const info = exploreCertificate(c);
227
+ return info.tbsCertificate.extensions && info.tbsCertificate.extensions.subjectKeyIdentifier === wantedIssuerKey;
228
+ return true;
229
+ });
230
+
231
+ if (potentialIssuers.length === 1) {
232
+ return potentialIssuers[0];
233
+ }
234
+ if (potentialIssuers.length > 1) {
235
+ debugLog("findIssuerCertificateInChain: certificate is not self-signed but has several issuers");
236
+ return potentialIssuers[0];
237
+ }
238
+ return null;
239
+ }
240
+
206
241
  export enum CertificateManagerState {
207
242
  Uninitialized = 0,
208
243
  Initializing = 1,
@@ -392,12 +427,27 @@ export class CertificateManager {
392
427
 
393
428
  debugLog("Is the Certificate self-signed ?", isSelfSigned);
394
429
  if (!isSelfSigned) {
395
- const issuerCertificate = await this.findIssuerCertificate(chain[0]);
396
- // console.log("issuer is found", !!issuerCertificate, info.tbsCertificate.extensions.subjectKeyIdentifier, info.tbsCertificate.extensions?.authorityKeyIdentifier?.keyIdentifier);
430
+ debugLog(
431
+ "Is issuer found in the list of know issuers ?",
432
+ "\n subjectKeyIdentifier = ",
433
+ info.tbsCertificate.extensions?.subjectKeyIdentifier,
434
+ "\n authorityKeyIdentifier = ",
435
+ info.tbsCertificate.extensions?.authorityKeyIdentifier?.keyIdentifier
436
+ );
437
+ let issuerCertificate = await this.findIssuerCertificate(chain[0]);
397
438
  if (!issuerCertificate) {
398
- // if the certificate is not self-signed we ust have a issuer.
399
- // but no Issuer is not found
400
- return VerificationStatus.BadCertificateChainIncomplete;
439
+ // the issuer has not been found in the list of trusted certificate
440
+ // may be the issuer certificate is in the chain itself ?
441
+ issuerCertificate = findIssuerCertificateInChain(chain[0], chain);
442
+ if (!issuerCertificate) {
443
+ debugLog(
444
+ " the issuer has not been found in the chain itself nor in the issuer.cert list => the chain is incomplete!"
445
+ );
446
+ return VerificationStatus.BadCertificateChainIncomplete;
447
+ }
448
+ debugLog(" the issuer certificate has been found in the chain itself ! the chain is complete !");
449
+ } else {
450
+ debugLog(" the issuer certificate has been found in the issuer.cert folder !");
401
451
  }
402
452
  const issuerStatus = await this._innerVerifyCertificateAsync(issuerCertificate, true, level + 1);
403
453
  if (issuerStatus === VerificationStatus.BadCertificateRevocationUnknown) {
@@ -412,6 +462,11 @@ export class CertificateManager {
412
462
  // the issuer must have valid dates ....
413
463
  return VerificationStatus.BadCertificateIssuerTimeInvalid;
414
464
  }
465
+ if (issuerStatus == VerificationStatus.BadCertificateUntrusted) {
466
+ debugLog("warning issuerStatus = ", issuerStatus.toString(), "the issuer certificate is not trusted");
467
+ // return VerificationStatus.BadSecurityChecksFailed;
468
+ }
469
+
415
470
  if (issuerStatus !== VerificationStatus.Good && issuerStatus !== VerificationStatus.BadCertificateUntrusted) {
416
471
  // if the issuer has other issue => let's drop!
417
472
  return VerificationStatus.BadSecurityChecksFailed;
@@ -419,7 +474,7 @@ export class CertificateManager {
419
474
  // verify that certificate was signed by issuer
420
475
  const isCertificateSignatureOK = verifyCertificateSignature(certificate, issuerCertificate);
421
476
  if (!isCertificateSignatureOK) {
422
- // the certificate was not signed by the issuer as it claim to be ! Danger
477
+ debugLog(" the certificate was not signed by the issuer as it claim to be ! Danger");
423
478
  return VerificationStatus.BadSecurityChecksFailed;
424
479
  }
425
480
  hasValidIssuer = true;
@@ -477,8 +532,8 @@ export class CertificateManager {
477
532
  // certificate is not active yet
478
533
  debugLog(
479
534
  chalk.red("certificate is invalid : certificate is not active yet !") +
480
- " not before date =" +
481
- certificateInfo.notBefore
535
+ " not before date =" +
536
+ certificateInfo.notBefore
482
537
  );
483
538
  isTimeInvalid = true;
484
539
  }
@@ -756,7 +811,20 @@ export class CertificateManager {
756
811
  });
757
812
  }
758
813
 
759
- // find the issuer certificate
814
+ /**
815
+ * find the issuer certificate among the trusted issuer certificates.
816
+ *
817
+ * The findIssuerCertificate method is an asynchronous method that attempts to find
818
+ * the issuer certificate for a given certificate from the list of issuer certificate declared in the PKI
819
+ *
820
+ * - If the certificate is self-signed, it returns the certificate itself.
821
+ *
822
+ * - If the certificate has no extension 3, it is assumed to be generated by an old system, and a null value is returned.
823
+ *
824
+ * - the method checks both issuer and trusted certificates and returns the appropriate issuercertificate,
825
+ * if found. If multiple matching certificates are found, a warning is logged to the console.
826
+ *
827
+ */
760
828
  public async findIssuerCertificate(certificate: Certificate): Promise<Certificate | null> {
761
829
  const certInfo = exploreCertificate(certificate);
762
830
 
@@ -865,8 +933,8 @@ export class CertificateManager {
865
933
  newStatus === "rejected"
866
934
  ? this.rejectedFolder
867
935
  : newStatus === "trusted"
868
- ? this.trustedFolder
869
- : this.rejectedFolder;
936
+ ? this.trustedFolder
937
+ : this.rejectedFolder;
870
938
  const certificateDest = path.join(destFolder, path.basename(certificateSrc));
871
939
 
872
940
  debugLog("_moveCertificate1", fingerprint.substr(0, 10), "old name", certificateSrc);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-opcua-pki",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "description": "PKI management for node-opcua",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -49,7 +49,7 @@
49
49
  "chokidar": "^3.5.3",
50
50
  "cli-table": "^0.3.11",
51
51
  "minimist": "^1.2.8",
52
- "node-opcua-crypto": "^2.1.2",
52
+ "node-opcua-crypto": "^2.2.0",
53
53
  "progress": "^2.0.3",
54
54
  "rimraf": "3.0.2",
55
55
  "thenify": "^3.3.1",