node-opcua-pki 4.0.0-beta.3 → 4.0.0-beta.4

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.
Files changed (96) hide show
  1. package/package.json +3 -3
  2. package/.eslintrc.yml +0 -17
  3. package/.ignore +0 -6
  4. package/.prettierrc +0 -5
  5. package/dist/lib/ca/certificate_authority.js.map +0 -1
  6. package/dist/lib/ca/crypto_create_CA.js.map +0 -1
  7. package/dist/lib/ca/index.js.map +0 -1
  8. package/dist/lib/ca/templates/ca_config_template.cnf.js.map +0 -1
  9. package/dist/lib/ca/templates/simple_config_template.cnf.js.map +0 -1
  10. package/dist/lib/index.js.map +0 -1
  11. package/dist/lib/misc/applicationurn.js.map +0 -1
  12. package/dist/lib/misc/hostname.js.map +0 -1
  13. package/dist/lib/misc/subject.js.map +0 -1
  14. package/dist/lib/pki/certificate_manager.js.map +0 -1
  15. package/dist/lib/pki/common.js.map +0 -1
  16. package/dist/lib/pki/templates/simple_config_template.cnf.js.map +0 -1
  17. package/dist/lib/pki/toolbox_pfx.js.map +0 -1
  18. package/dist/lib/toolbox/common.js.map +0 -1
  19. package/dist/lib/toolbox/common2.js.map +0 -1
  20. package/dist/lib/toolbox/config.js.map +0 -1
  21. package/dist/lib/toolbox/display.js.map +0 -1
  22. package/dist/lib/toolbox/index.js.map +0 -1
  23. package/dist/lib/toolbox/with_openssl/_create_random_file.js.map +0 -1
  24. package/dist/lib/toolbox/with_openssl/_env.js.map +0 -1
  25. package/dist/lib/toolbox/with_openssl/create_certificate_signing_request.js.map +0 -1
  26. package/dist/lib/toolbox/with_openssl/create_private_key.js.map +0 -1
  27. package/dist/lib/toolbox/with_openssl/create_self_signed_certificate.js.map +0 -1
  28. package/dist/lib/toolbox/with_openssl/execute_openssl.js.map +0 -1
  29. package/dist/lib/toolbox/with_openssl/index.js.map +0 -1
  30. package/dist/lib/toolbox/with_openssl/install_prerequisite.js.map +0 -1
  31. package/dist/lib/toolbox/with_openssl/toolbox.js.map +0 -1
  32. package/dist/lib/toolbox/without_openssl/create_certificate_signing_request.js.map +0 -1
  33. package/dist/lib/toolbox/without_openssl/create_private_key.js.map +0 -1
  34. package/dist/lib/toolbox/without_openssl/create_self_signed_certificate.js.map +0 -1
  35. package/dist/lib/toolbox/without_openssl/index.js.map +0 -1
  36. package/dist/test/helpers.d.ts +0 -7
  37. package/dist/test/helpers.js +0 -56
  38. package/dist/test/helpers.js.map +0 -1
  39. package/dist/test/test_certificate_authority.d.ts +0 -1
  40. package/dist/test/test_certificate_authority.js +0 -265
  41. package/dist/test/test_certificate_authority.js.map +0 -1
  42. package/dist/test/test_certificate_manager.d.ts +0 -1
  43. package/dist/test/test_certificate_manager.js +0 -235
  44. package/dist/test/test_certificate_manager.js.map +0 -1
  45. package/dist/test/test_certificate_validation.d.ts +0 -1
  46. package/dist/test/test_certificate_validation.js +0 -153
  47. package/dist/test/test_certificate_validation.js.map +0 -1
  48. package/dist/test/test_concurrency.d.ts +0 -1
  49. package/dist/test/test_concurrency.js +0 -50
  50. package/dist/test/test_concurrency.js.map +0 -1
  51. package/dist/test/test_create_signing_request.d.ts +0 -1
  52. package/dist/test/test_create_signing_request.js +0 -101
  53. package/dist/test/test_create_signing_request.js.map +0 -1
  54. package/dist/test/test_crypto_create_CA.d.ts +0 -1
  55. package/dist/test/test_crypto_create_CA.js +0 -272
  56. package/dist/test/test_crypto_create_CA.js.map +0 -1
  57. package/dist/test/test_ctt_use_cases.d.ts +0 -1
  58. package/dist/test/test_ctt_use_cases.js +0 -384
  59. package/dist/test/test_ctt_use_cases.js.map +0 -1
  60. package/dist/test/test_install_prerequisite.d.ts +0 -1
  61. package/dist/test/test_install_prerequisite.js +0 -11
  62. package/dist/test/test_install_prerequisite.js.map +0 -1
  63. package/dist/test/test_toolbox.d.ts +0 -1
  64. package/dist/test/test_toolbox.js +0 -45
  65. package/dist/test/test_toolbox.js.map +0 -1
  66. package/lib/ca/certificate_authority.ts +0 -761
  67. package/lib/ca/crypto_create_CA.ts +0 -1136
  68. package/lib/ca/index.ts +0 -1
  69. package/lib/ca/templates/ca_config_template.cnf.ts +0 -129
  70. package/lib/index.ts +0 -30
  71. package/lib/misc/applicationurn.ts +0 -45
  72. package/lib/misc/hostname.ts +0 -89
  73. package/lib/misc/subject.ts +0 -1
  74. package/lib/pki/certificate_manager.ts +0 -1183
  75. package/lib/pki/empty_config.cnf +0 -1
  76. package/lib/pki/templates/simple_config_template.cnf.ts +0 -75
  77. package/lib/pki/toolbox_pfx.ts +0 -19
  78. package/lib/toolbox/common.ts +0 -116
  79. package/lib/toolbox/common2.ts +0 -59
  80. package/lib/toolbox/config.ts +0 -27
  81. package/lib/toolbox/display.ts +0 -69
  82. package/lib/toolbox/index.ts +0 -27
  83. package/lib/toolbox/with_openssl/_create_random_file.ts +0 -60
  84. package/lib/toolbox/with_openssl/_env.ts +0 -75
  85. package/lib/toolbox/with_openssl/create_certificate_signing_request.ts +0 -104
  86. package/lib/toolbox/with_openssl/create_private_key.ts +0 -120
  87. package/lib/toolbox/with_openssl/create_self_signed_certificate.ts +0 -174
  88. package/lib/toolbox/with_openssl/execute_openssl.ts +0 -220
  89. package/lib/toolbox/with_openssl/index.ts +0 -29
  90. package/lib/toolbox/with_openssl/install_prerequisite.ts +0 -454
  91. package/lib/toolbox/with_openssl/toolbox.ts +0 -144
  92. package/lib/toolbox/without_openssl/create_certificate_signing_request.ts +0 -81
  93. package/lib/toolbox/without_openssl/create_private_key.ts +0 -29
  94. package/lib/toolbox/without_openssl/create_self_signed_certificate.ts +0 -90
  95. package/lib/toolbox/without_openssl/index.ts +0 -25
  96. package/tsconfig.json +0 -20
@@ -1,265 +0,0 @@
1
- "use strict";
2
- // tslint:disable:no-console
3
- // tslint:disable:no-shadowed-variable
4
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
- return new (P || (P = Promise))(function (resolve, reject) {
7
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
- step((generator = generator.apply(thisArg, _arguments || [])).next());
11
- });
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- const fs = require("fs");
15
- const path = require("path");
16
- const node_opcua_crypto_1 = require("node-opcua-crypto");
17
- const index_1 = require("../lib/index");
18
- const with_openssl_1 = require("../lib/toolbox/with_openssl");
19
- const certificate_authority_1 = require("../lib/ca/certificate_authority");
20
- const helpers_1 = require("./helpers");
21
- const doDebug = !!process.env.DEBUG;
22
- describe("Certificate Authority", function () {
23
- const testData = (0, helpers_1.beforeTest)(this);
24
- let options = {};
25
- before(() => {
26
- options = {
27
- keySize: 2048,
28
- location: path.join(testData.tmpFolder, "CA"),
29
- };
30
- });
31
- it("should read openssl version", (done) => {
32
- (0, with_openssl_1.execute_openssl)("version", { cwd: "." }, (err, output) => {
33
- if (err) {
34
- return done(err);
35
- }
36
- output = output.trim();
37
- index_1.g_config.opensslVersion.should.eql(output);
38
- done(err);
39
- });
40
- });
41
- it("should create a CertificateAuthority", () => __awaiter(this, void 0, void 0, function* () {
42
- const ca = new certificate_authority_1.CertificateAuthority(options);
43
- yield ca.initialize();
44
- }));
45
- });
46
- describe("Signing Certificate with Certificate Authority", function () {
47
- const testData = (0, helpers_1.beforeTest)(this);
48
- let theCertificateAuthority;
49
- let someCertificateManager;
50
- before(() => __awaiter(this, void 0, void 0, function* () {
51
- theCertificateAuthority = new certificate_authority_1.CertificateAuthority({
52
- keySize: 2048,
53
- location: path.join(testData.tmpFolder, "CA"),
54
- });
55
- someCertificateManager = new index_1.CertificateManager({
56
- location: path.join(testData.tmpFolder, "PI"),
57
- });
58
- yield someCertificateManager.initialize();
59
- yield theCertificateAuthority.initialize();
60
- yield someCertificateManager.dispose();
61
- }));
62
- function createCertificateRequest() {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- // let create a certificate request from the certificate manager
65
- const params = {
66
- applicationUri: "MY:APPLICATION:URI",
67
- dns: ["localhost", "my.domain.com"],
68
- ip: ["192.123.145.121"],
69
- subject: "/CN=MyCommonName",
70
- // can only be TODAY due to openssl limitation : startDate: new Date(2010,2,2),
71
- validity: 365 * 7,
72
- };
73
- const certificateSigningRequestFilename = yield someCertificateManager.createCertificateRequest(params);
74
- return certificateSigningRequestFilename;
75
- });
76
- }
77
- function verifyCertificateAgainstPrivateKey(certificate) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- console.log("someCertificateManager.privateKey=", someCertificateManager.privateKey);
80
- const privateKey = (0, node_opcua_crypto_1.readPrivateKey)(someCertificateManager.privateKey);
81
- const rsaLength = (0, node_opcua_crypto_1.rsaLengthPrivateKey)(privateKey);
82
- if (!(0, node_opcua_crypto_1.certificateMatchesPrivateKey)(certificate, privateKey)) {
83
- throw new Error("Certificate and private key do not match !!!");
84
- }
85
- });
86
- }
87
- it("T0 - should have a CA Certificate", () => __awaiter(this, void 0, void 0, function* () {
88
- fs.existsSync(theCertificateAuthority.caCertificate).should.eql(true);
89
- }));
90
- it("T1 - should have a CA Certificate with a CRL", () => __awaiter(this, void 0, void 0, function* () {
91
- yield theCertificateAuthority.constructCACertificateWithCRL();
92
- fs.existsSync(theCertificateAuthority.caCertificateWithCrl).should.eql(true);
93
- }));
94
- it("T2 - should sign a Certificate Request", () => __awaiter(this, void 0, void 0, function* () {
95
- const self = {
96
- certificateRequest: "",
97
- };
98
- // create a Certificate Signing Request
99
- self.certificateRequest = yield createCertificateRequest();
100
- fs.existsSync(self.certificateRequest).should.eql(true);
101
- const certificateFilename = path.join(testData.tmpFolder, "sample_certificate.pem");
102
- const params = {
103
- applicationUri: "BAD SHOULD BE IN REQUEST",
104
- startDate: new Date(2011, 25, 12),
105
- validity: 10 * 365,
106
- };
107
- yield theCertificateAuthority.signCertificateRequest(certificateFilename, self.certificateRequest, params);
108
- fs.existsSync(certificateFilename).should.eql(true, "certificate file " + certificateFilename + " must exist");
109
- // Serial Number: 4096 (0x1000)
110
- const certificateChain = (0, node_opcua_crypto_1.readCertificate)(certificateFilename);
111
- const elements = (0, node_opcua_crypto_1.split_der)(certificateChain);
112
- elements.length.should.eql(2);
113
- // should have 2 x -----BEGIN CERTIFICATE----- in the chain
114
- // should verify that certificate is valid
115
- // verify the subject Alternative Name
116
- const csr = (0, node_opcua_crypto_1.readCertificate)(self.certificateRequest);
117
- const infoCSR = (0, node_opcua_crypto_1.exploreCertificateSigningRequest)(csr);
118
- const info = (0, node_opcua_crypto_1.exploreCertificate)(certificateChain);
119
- if (doDebug) {
120
- console.log(infoCSR.extensionRequest.basicConstraints);
121
- console.log(info.tbsCertificate.extensions.basicConstraints);
122
- console.log(infoCSR.extensionRequest.keyUsage);
123
- console.log(info.tbsCertificate.extensions.keyUsage);
124
- console.log(infoCSR.extensionRequest.subjectAltName);
125
- console.log(info.tbsCertificate.extensions.subjectAltName);
126
- }
127
- infoCSR.extensionRequest.subjectAltName.should.eql(info.tbsCertificate.extensions.subjectAltName);
128
- // todo
129
- yield verifyCertificateAgainstPrivateKey(elements[0]);
130
- }));
131
- function sign(certificateRequest, startDate, validity) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const a = (0, with_openssl_1.x509Date)(startDate) + "_" + validity;
134
- fs.existsSync(certificateRequest).should.eql(true, "certificate request " + certificateRequest + " must exist");
135
- const certificateFilename = path.join(testData.tmpFolder, "sample_certificate" + a + ".pem");
136
- const params = {
137
- applicationUri: "BAD SHOULD BE IN REQUEST",
138
- startDate,
139
- validity,
140
- };
141
- if (fs.existsSync(certificateFilename)) {
142
- fs.unlinkSync(certificateFilename);
143
- }
144
- const certificate = yield theCertificateAuthority.signCertificateRequest(certificateFilename, certificateRequest, params);
145
- fs.existsSync(certificate).should.eql(true, "certificate: " + certificateFilename + " should exists");
146
- // Serial Number: 4096 (0x1000)
147
- // should have 2 x -----BEGIN CERTIFICATE----- in the chain
148
- return certificate;
149
- });
150
- }
151
- const now = new Date();
152
- const lastYear = new Date();
153
- lastYear.setFullYear(now.getFullYear() - 1);
154
- const nextYear = new Date();
155
- nextYear.setFullYear(now.getFullYear() + 1);
156
- it("T3 - should create various Certificates signed by the CA authority", () => __awaiter(this, void 0, void 0, function* () {
157
- // create a Certificate Signing Request
158
- const certificateRequest = yield createCertificateRequest();
159
- fs.existsSync(certificateRequest).should.eql(true, "certificate request " + certificateRequest + " must exist");
160
- yield sign(certificateRequest, lastYear, 200);
161
- yield sign(certificateRequest, lastYear, 10 * 365); // valid
162
- yield sign(certificateRequest, nextYear, 365); // not started yet
163
- }));
164
- it("T4 - should create various self-signed Certificates using the CA", () => __awaiter(this, void 0, void 0, function* () {
165
- // using a CA to construct self-signed certificates provides the following benefits:
166
- // - startDate can be easily specified in the past or the future
167
- // - certificate can be revoked ??? to be checked.
168
- const privateKey = someCertificateManager.privateKey;
169
- const certificate = path.join(testData.tmpFolder, "sample_self_signed_certificate.pem");
170
- fs.existsSync(certificate).should.eql(false, certificate + " must not exist");
171
- yield theCertificateAuthority.createSelfSignedCertificate(certificate, privateKey, {
172
- applicationUri: "SomeUri",
173
- });
174
- fs.existsSync(certificate).should.eql(true);
175
- yield verifyCertificateAgainstPrivateKey((0, node_opcua_crypto_1.readCertificate)(certificate));
176
- }));
177
- /**
178
- *
179
- * @param certificate {String} certificate to create
180
- * @param privateKey
181
- * @param callback
182
- */
183
- function createSelfSignedCertificate(certificate, privateKey) {
184
- return __awaiter(this, void 0, void 0, function* () {
185
- const startDate = new Date();
186
- const validity = 1000;
187
- const params = {
188
- applicationUri: "BAD SHOULD BE IN REQUEST",
189
- startDate,
190
- validity,
191
- };
192
- yield theCertificateAuthority.createSelfSignedCertificate(certificate, privateKey, params);
193
- // console.log("signed_certificate = signed_certificate", certificate);
194
- return certificate;
195
- });
196
- }
197
- it("T5 - should revoke a self-signed certificate", () => __awaiter(this, void 0, void 0, function* () {
198
- const privateKey = someCertificateManager.privateKey;
199
- const certificate = path.join(testData.tmpFolder, "certificate_to_be_revoked1.pem");
200
- yield createSelfSignedCertificate(certificate, privateKey);
201
- fs.existsSync(certificate).should.eql(true);
202
- yield theCertificateAuthority.revokeCertificate(certificate, {});
203
- }));
204
- function createCertificateFromCA() {
205
- return __awaiter(this, void 0, void 0, function* () {
206
- const certificateRequest = yield createCertificateRequest();
207
- const signedCertificate = yield sign(certificateRequest, lastYear, 10 * 365 + 10);
208
- return signedCertificate;
209
- });
210
- }
211
- it("T6 - should revoke a certificate emitted by the CA", () => __awaiter(this, void 0, void 0, function* () {
212
- // g_config.silent = false;
213
- const caCertificateFilename = theCertificateAuthority.caCertificate;
214
- const caCRLFilename = theCertificateAuthority.revocationList;
215
- const caCertificate = yield (0, node_opcua_crypto_1.readCertificate)(caCertificateFilename);
216
- const caCRLBefore = yield (0, node_opcua_crypto_1.readCertificateRevocationList)(caCRLFilename);
217
- const certificateFilename = yield createCertificateFromCA();
218
- fs.existsSync(certificateFilename).should.eql(true);
219
- const certificate = yield (0, node_opcua_crypto_1.readCertificate)(certificateFilename);
220
- // ---- lets create a
221
- const pkiLocation = path.join(testData.tmpFolder, "somePKI");
222
- const cm = new index_1.CertificateManager({
223
- location: pkiLocation,
224
- });
225
- yield cm.initialize();
226
- const status1 = yield cm.addIssuer(caCertificate, true, true);
227
- status1.should.eql(index_1.VerificationStatus.Good);
228
- const status4 = yield cm.addRevocationList(caCRLBefore);
229
- status4.should.eql(index_1.VerificationStatus.Good);
230
- // check status before revocation...
231
- const validate1 = yield cm.verifyCertificate(certificate);
232
- validate1.should.eql(index_1.VerificationStatus.Good);
233
- // now revoke certificate
234
- yield theCertificateAuthority.revokeCertificate(certificateFilename, {});
235
- const caCRLAfter = yield (0, node_opcua_crypto_1.readCertificateRevocationList)(caCRLFilename);
236
- const status3 = yield cm.addRevocationList(caCRLAfter);
237
- status3.should.eql(index_1.VerificationStatus.Good);
238
- const validate2 = yield cm.verifyCertificate(certificate);
239
- validate2.should.eql(index_1.VerificationStatus.BadCertificateRevoked);
240
- yield cm.dispose();
241
- }));
242
- it("T7 - it should automatically accept Certificate issued by a trusted issuer that is not in the CRL", () => __awaiter(this, void 0, void 0, function* () {
243
- const caCertificateFilename = theCertificateAuthority.caCertificate;
244
- const caCRLFilename = theCertificateAuthority.revocationList;
245
- const caCertificate = yield (0, node_opcua_crypto_1.readCertificate)(caCertificateFilename);
246
- const caCRLBefore = yield (0, node_opcua_crypto_1.readCertificateRevocationList)(caCRLFilename);
247
- const certificateFilename = yield createCertificateFromCA();
248
- fs.existsSync(certificateFilename).should.eql(true);
249
- const certificate = yield (0, node_opcua_crypto_1.readCertificate)(certificateFilename);
250
- // ---- lets create a
251
- const pkiLocation = path.join(testData.tmpFolder, "somePKI1");
252
- const cm = new index_1.CertificateManager({
253
- location: pkiLocation,
254
- });
255
- yield cm.initialize();
256
- const validate0 = yield cm.verifyCertificate(certificate);
257
- validate0.should.eql(index_1.VerificationStatus.BadCertificateChainIncomplete);
258
- const status1 = yield cm.addIssuer(caCertificate);
259
- const status2 = yield cm.addRevocationList(caCRLBefore);
260
- const validate1 = yield cm.verifyCertificate(certificate);
261
- validate1.should.eql(index_1.VerificationStatus.BadCertificateUntrusted);
262
- yield cm.dispose();
263
- }));
264
- });
265
- //# sourceMappingURL=test_certificate_authority.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test_certificate_authority.js","sourceRoot":"","sources":["../../test/test_certificate_authority.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "should";
@@ -1,235 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- Error.stackTraceLimit = Infinity;
13
- // tslint:disable: no-console
14
- // tslint:disable:variable-name
15
- // tslint:disable:no-shadowed-variable
16
- const fs = require("fs");
17
- const path = require("path");
18
- const util_1 = require("util");
19
- require("should");
20
- const node_opcua_crypto_1 = require("node-opcua-crypto");
21
- const helpers_1 = require("./helpers");
22
- const lib_1 = require("../lib");
23
- const with_openssl_1 = require("../lib/toolbox/with_openssl");
24
- const q = lib_1.quote;
25
- const n = lib_1.make_path;
26
- describe("CertificateManager", function () {
27
- this.timeout(40000);
28
- const testData = (0, helpers_1.beforeTest)(this);
29
- it("should create a certificateManager", () => __awaiter(this, void 0, void 0, function* () {
30
- const options = {
31
- location: path.join(testData.tmpFolder, "PKI"),
32
- };
33
- const cm = new lib_1.CertificateManager(options);
34
- yield cm.initialize();
35
- fs.existsSync(path.join(options.location)).should.eql(true);
36
- fs.existsSync(path.join(options.location, "trusted")).should.eql(true);
37
- fs.existsSync(path.join(options.location, "rejected")).should.eql(true);
38
- fs.existsSync(path.join(options.location, "own")).should.eql(true);
39
- fs.existsSync(path.join(options.location, "own/certs")).should.eql(true);
40
- fs.existsSync(path.join(options.location, "own/private")).should.eql(true);
41
- fs.existsSync(path.join(options.location, "own/openssl.cnf")).should.eql(true);
42
- fs.existsSync(path.join(options.location, "own/private/private_key.pem")).should.eql(true);
43
- const data = fs.readFileSync(path.join(options.location, "own/openssl.cnf"), "ascii");
44
- // config file must have a distinguish name section
45
- (0, helpers_1.grep)(data, /distinguished_name/).should.match(/distinguished_name/);
46
- yield cm.dispose();
47
- }));
48
- it("should create its own self-signed certificate", () => __awaiter(this, void 0, void 0, function* () {
49
- function get_days(date1, date2) {
50
- const ms_in_one_day = 24 * 3600000;
51
- const diff = date1.getTime() - date2.getTime();
52
- return Math.round(diff / ms_in_one_day);
53
- }
54
- const options = {
55
- location: path.join(testData.tmpFolder, "PKI1"),
56
- };
57
- const cm = new lib_1.CertificateManager(options);
58
- yield cm.initialize();
59
- const now = new Date();
60
- const endDate = new Date(now.getFullYear() + 7, 10, 10);
61
- const duration = get_days(endDate, now);
62
- const params = {
63
- applicationUri: "MY:APPLICATION:URI",
64
- dns: ["some.other.domain.com", "my.domain.com"],
65
- ip: ["192.123.145.121"],
66
- subject: "CN=MyCommonName",
67
- // can only be TODAY due to openssl limitation : startDate: new Date(2010,2,2),
68
- validity: duration,
69
- startDate: now,
70
- };
71
- yield cm.createSelfSignedCertificate(params);
72
- const expectedCertificate = path.join(options.location, "own/certs/self_signed_certificate.pem");
73
- fs.existsSync(expectedCertificate).should.eql(true, "self-signed certificate must exist");
74
- const data = (yield (0, util_1.promisify)(with_openssl_1.dumpCertificate)(expectedCertificate));
75
- yield fs.promises.writeFile(path.join(testData.tmpFolder, "dump_cert1.txt"), data);
76
- (0, helpers_1.grep)(data, /URI/).should.match(/URI:MY:APPLICATION:URI/);
77
- (0, helpers_1.grep)(data, /DNS/).should.match(/DNS:some.other.domain.com/);
78
- (0, helpers_1.grep)(data, /DNS/).should.match(/DNS:my.domain.com/);
79
- if (lib_1.g_config.opensslVersion.match(/1.0.2/)) {
80
- // note openssl version 1.0.1 does support sha256 signature
81
- (0, helpers_1.grep)(data, /Signature Algorithm/).should.match(/Signature Algorithm: sha256WithRSAEncryption/);
82
- }
83
- (0, helpers_1.grep)(data, /Self-signed/).should.match(/Self-signed/);
84
- // the self-signed certificate should contain
85
- // Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
86
- (0, helpers_1.grep)(data, /Digital Signature/).should.match(/Digital Signature/);
87
- (0, helpers_1.grep)(data, /Key Encipherment/).should.match(/Key Encipherment/);
88
- (0, helpers_1.grep)(data, /Data Encipherment/).should.match(/Data Encipherment/);
89
- // the self-signed certificate should not contain CRL Sign
90
- (0, helpers_1.grep)(data, /CRL Sign/).should.eql("");
91
- const y = new Date().getFullYear();
92
- (0, helpers_1.grep)(data, /Not Before/).should.match(new RegExp(y.toString() + " GMT"));
93
- (0, helpers_1.grep)(data, /Not After/).should.match(new RegExp((y + 7).toString() + " GMT"));
94
- yield cm.dispose();
95
- }));
96
- });
97
- describe("CertificateManager managing certificate", function () {
98
- this.timeout(400000);
99
- const testData = (0, helpers_1.beforeTest)(this);
100
- let cm;
101
- function createSampleCertificateDer(certificate) {
102
- return __awaiter(this, void 0, void 0, function* () {
103
- (0, with_openssl_1.processAltNames)({ applicationUri: "T" });
104
- const defaultOpensslConfPath = path.join(__dirname, "../tmp/PKI2/own/openssl.cnf");
105
- const defaultOpensslConf = (0, with_openssl_1.generateStaticConfig)(defaultOpensslConfPath);
106
- certificate = (0, lib_1.make_path)(certificate);
107
- // openssl req -x509 -days 365 -nodes -newkey rsa:1024 \
108
- // -keyout private_key.pem -outform der -out certificate.der"
109
- yield (0, with_openssl_1.executeOpensslAsync)("req " +
110
- "-x509 -days 365 -nodes -newkey rsa:1024 " +
111
- "-batch -keyout private_key.pem " +
112
- "-outform der -out " +
113
- q(n(certificate)) +
114
- " -config " +
115
- q(n(defaultOpensslConf)), {});
116
- });
117
- }
118
- const sample_certificate1_der = path.join(__dirname, "fixtures/sample_certificate1.der");
119
- const sample_certificate2_der = path.join(__dirname, "fixtures/sample_certificate2.der");
120
- const sample_certificate3_der = path.join(__dirname, "fixtures/sample_certificate3.der");
121
- const sample_certificate4_der = path.join(__dirname, "fixtures/sample_certificate4.der");
122
- before(() => __awaiter(this, void 0, void 0, function* () {
123
- const options = {
124
- location: path.join(testData.tmpFolder, "PKI2"),
125
- };
126
- cm = new lib_1.CertificateManager(options);
127
- yield cm.initialize();
128
- yield createSampleCertificateDer(sample_certificate1_der);
129
- yield createSampleCertificateDer(sample_certificate2_der);
130
- yield createSampleCertificateDer(sample_certificate3_der);
131
- yield createSampleCertificateDer(sample_certificate4_der);
132
- yield cm.dispose();
133
- }));
134
- it("Q1 - CertificateManager#_getCertificateStatus should return 'unknown' if the certificate is first seen", () => __awaiter(this, void 0, void 0, function* () {
135
- const certificate = fs.readFileSync(sample_certificate1_der);
136
- certificate.should.be.instanceOf(Buffer);
137
- yield (0, with_openssl_1.executeOpensslAsync)("x509 -inform der -in " + q(n(sample_certificate1_der)) + " " + "-fingerprint -noout ", {});
138
- const status = yield cm._checkRejectedOrTrusted(certificate);
139
- status.should.eql("unknown");
140
- }));
141
- it("Q2 - CertificateManager#getCertificateStatus should store unknown certificate into the untrusted folder", () => __awaiter(this, void 0, void 0, function* () {
142
- const certificate = fs.readFileSync(sample_certificate2_der);
143
- const status1 = yield cm.getCertificateStatus(certificate);
144
- status1.should.eql("rejected");
145
- const status2 = yield cm.getCertificateStatus(certificate);
146
- status2.should.eql("rejected");
147
- }));
148
- it("Q3 - CertificateManager#trustCertificate should store in trusted folder", () => __awaiter(this, void 0, void 0, function* () {
149
- const certificate = fs.readFileSync(sample_certificate3_der);
150
- const status1 = yield cm.getCertificateStatus(certificate);
151
- status1.should.eql("rejected");
152
- yield cm.trustCertificate(certificate);
153
- const status2 = yield cm.getCertificateStatus(certificate);
154
- status2.should.eql("trusted");
155
- yield cm.rejectCertificate(certificate);
156
- const status3 = yield cm.getCertificateStatus(certificate);
157
- status3.should.eql("rejected");
158
- yield cm.rejectCertificate(certificate);
159
- }));
160
- it("Q4 - Async CertificateManager#trustCertificate should store in trusted folder", () => __awaiter(this, void 0, void 0, function* () {
161
- const fsReadFile = (0, util_1.promisify)(fs.readFile);
162
- const certificate = yield fsReadFile(sample_certificate3_der);
163
- const status = yield cm.getCertificateStatus(certificate);
164
- status.should.eql("rejected");
165
- yield cm.trustCertificate(certificate);
166
- const status1 = yield cm.getCertificateStatus(certificate);
167
- status1.should.eql("trusted");
168
- const status1_a = yield cm.isCertificateTrusted(certificate);
169
- status1_a.should.eql("Good");
170
- yield cm.rejectCertificate(certificate);
171
- const status2 = yield cm.getCertificateStatus(certificate);
172
- status2.should.eql("rejected");
173
- const status2_a = yield cm.isCertificateTrusted(certificate);
174
- status2_a.should.eql("BadCertificateUntrusted");
175
- yield cm.rejectCertificate(certificate);
176
- }));
177
- it("Q5 - isCertificateTrusted with invalid certificate", () => __awaiter(this, void 0, void 0, function* () {
178
- const badCertificate = Buffer.from("bad certificate");
179
- const status2_a = yield cm.isCertificateTrusted(badCertificate);
180
- status2_a.should.eql("BadCertificateInvalid");
181
- }));
182
- it("Q6 - isCertificateTrusted", () => __awaiter(this, void 0, void 0, function* () {
183
- const fsReadFile = (0, util_1.promisify)(fs.readFile);
184
- const certificate = yield fsReadFile(sample_certificate3_der);
185
- const status = yield cm.isCertificateTrusted(certificate);
186
- status.should.eql("BadCertificateUntrusted");
187
- yield cm.trustCertificate(certificate);
188
- const status1 = yield cm.isCertificateTrusted(certificate);
189
- status1.should.eql("Good");
190
- yield cm.rejectCertificate(certificate);
191
- const status2 = yield cm.isCertificateTrusted(certificate);
192
- status2.should.eql("BadCertificateUntrusted");
193
- yield cm.rejectCertificate(certificate);
194
- }));
195
- it("Q7 - Checking certificate", () => __awaiter(this, void 0, void 0, function* () {
196
- yield cm.initialize();
197
- const sample_certificate3_pem = path.join(__dirname, "fixtures/sample_server_selfSigned1.pem");
198
- const certificate = yield (0, node_opcua_crypto_1.readCertificate)(sample_certificate3_pem);
199
- yield cm.trustCertificate(certificate);
200
- const status = yield cm.getCertificateStatus(certificate);
201
- console.log("status ", status.toString());
202
- const verificationStatus = yield cm.verifyCertificateAsync(certificate);
203
- console.log("status ", verificationStatus.toString());
204
- }));
205
- it("Q8A - Disposing while initializing ", () => __awaiter(this, void 0, void 0, function* () {
206
- const options = {
207
- location: path.join(testData.tmpFolder, "PKI_aa"),
208
- };
209
- const cm = new lib_1.CertificateManager(options);
210
- yield new Promise((resolve) => {
211
- cm.initialize((err) => {
212
- console.log("initialized done", err);
213
- resolve();
214
- });
215
- cm.dispose();
216
- });
217
- }));
218
- it("Q8B - Disposing while initializing ", () => __awaiter(this, void 0, void 0, function* () {
219
- const options = {
220
- location: path.join(testData.tmpFolder, "PKI_aa"),
221
- };
222
- const cm = new lib_1.CertificateManager(options);
223
- yield new Promise((resolve) => {
224
- cm.initialize((err) => {
225
- console.log("initialized done", err);
226
- resolve();
227
- });
228
- setImmediate(() => {
229
- cm.dispose();
230
- console.log("disposed");
231
- });
232
- });
233
- }));
234
- });
235
- //# sourceMappingURL=test_certificate_manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test_certificate_manager.js","sourceRoot":"","sources":["../../test/test_certificate_manager.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "should";