84 lines
No EOL
2.3 KiB
JavaScript
84 lines
No EOL
2.3 KiB
JavaScript
|
|
import {
|
|
default as forge
|
|
} from "node-forge";
|
|
|
|
import {
|
|
writeFileSync,
|
|
mkdirSync
|
|
} from "fs";
|
|
|
|
import {
|
|
randomBytes
|
|
} from "crypto";
|
|
|
|
// Funktion zur Generierung und Speicherung eines Root-CA-Zertifikats
|
|
export function generateRootCA(Params) {
|
|
const uid = randomBytes(4).toString("hex");
|
|
// Generiere ein neues Schlüsselpaar
|
|
const keys = forge.pki.rsa.generateKeyPair(4096);
|
|
|
|
// Erstelle ein neues Zertifikat
|
|
const cert = forge.pki.createCertificate();
|
|
cert.publicKey = keys.publicKey;
|
|
// cert.serialNumber = '01';
|
|
cert.validity.notBefore = new Date();
|
|
cert.validity.notAfter = new Date();
|
|
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 10);
|
|
|
|
const attrs = [{
|
|
name: 'commonName',
|
|
value: 'My Root CA'
|
|
}, {
|
|
name: 'countryName',
|
|
value: 'US'
|
|
}, {
|
|
shortName: 'ST',
|
|
value: 'California'
|
|
}, {
|
|
name: 'localityName',
|
|
value: 'San Francisco'
|
|
}, {
|
|
name: 'organizationName',
|
|
value: 'My Organization'
|
|
}, {
|
|
shortName: 'OU',
|
|
value: 'My Organizational Unit'
|
|
}];
|
|
|
|
cert.setSubject(attrs);
|
|
cert.setIssuer(attrs);
|
|
|
|
// Erweiterungen hinzufügen
|
|
cert.setExtensions([{
|
|
name: 'basicConstraints',
|
|
cA: true
|
|
}, {
|
|
name: 'keyUsage',
|
|
keyCertSign: true,
|
|
cRLSign: true
|
|
}, {
|
|
name: 'subjectKeyIdentifier'
|
|
}]);
|
|
|
|
// Zertifikat mit dem privaten Schlüssel signieren
|
|
cert.sign(keys.privateKey, forge.md.sha256.create());
|
|
|
|
// Zertifikat und Schlüssel als PEM kodieren
|
|
const pemCert = forge.pki.certificateToPem(cert);
|
|
const pemPrivateKey = forge.pki.privateKeyToPem(keys.privateKey);
|
|
const pemPublicKey = forge.pki.publicKeyToPem(keys.publicKey);
|
|
|
|
// Erstelle das RootCA Verzeichnis
|
|
mkdirSync(`datastore/certificates/${uid}`)
|
|
|
|
// Zertifikat und Schlüssel in Dateien speichern
|
|
writeFileSync(`datastore/certificates/${uid}/rootCA.crt`, pemCert);
|
|
writeFileSync(`datastore/certificates/${uid}/rootCA.key`, pemPrivateKey);
|
|
writeFileSync(`datastore/certificates/${uid}/rootCA.pub`, pemPublicKey);
|
|
|
|
console.log('Root CA-Zertifikat und Schlüssel wurden generiert und gespeichert.');
|
|
}
|
|
|
|
// Funktion aufrufen, um das Root-CA-Zertifikat zu generieren
|
|
// generateRootCA();
|