77 lines
No EOL
2 KiB
JavaScript
77 lines
No EOL
2 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 einen neuen CSR
|
|
const csr = forge.pki.createCertificationRequest();
|
|
|
|
// Setze den öffentlichen Schlüssel
|
|
csr.publicKey = keys.publicKey;
|
|
|
|
// Setze die CSR Attribute
|
|
csr.setSubject([{
|
|
name: 'commonName',
|
|
value: 'example.com'
|
|
}, {
|
|
name: 'countryName',
|
|
value: 'US'
|
|
}, {
|
|
shortName: 'ST',
|
|
value: 'California'
|
|
}, {
|
|
name: 'localityName',
|
|
value: 'San Francisco'
|
|
}, {
|
|
name: 'organizationName',
|
|
value: 'Example, Inc.'
|
|
}, {
|
|
shortName: 'OU',
|
|
value: 'IT'
|
|
}]);
|
|
|
|
// Signiere die CSR mit dem privaten Schlüssel
|
|
csr.sign(keys.privateKey, forge.md.sha256.create());
|
|
|
|
// Überprüfe die CSR
|
|
const verified = csr.verify();
|
|
if (verified) {
|
|
console.log('CSR verification successful');
|
|
} else {
|
|
console.error('CSR verification failed');
|
|
return;
|
|
}
|
|
|
|
// CSR und Schlüssel als PEM kodieren
|
|
const pemCsr = forge.pki.certificationRequestToPem(csr);
|
|
const pemPrivateKey = forge.pki.privateKeyToPem(keys.privateKey);
|
|
|
|
// 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();
|