Neubau auf Abrufe
This commit is contained in:
@@ -1,63 +0,0 @@
|
||||
// Generiert selbstsignierte Zertifikate bei npm install
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import selfsigned from 'selfsigned';
|
||||
|
||||
const CERT_DIR = path.resolve('certs');
|
||||
const KEY_PATH = path.join(CERT_DIR, 'localhost.key');
|
||||
const CRT_PATH = path.join(CERT_DIR, 'localhost.crt');
|
||||
|
||||
function ensureDir(p) {
|
||||
if (!fs.existsSync(p)) fs.mkdirSync(p, { recursive: true });
|
||||
}
|
||||
|
||||
function generateIfMissing() {
|
||||
ensureDir(CERT_DIR);
|
||||
const host = process.env.HTTPS_HOST || 'localhost';
|
||||
const days = parseInt(process.env.HTTPS_CERT_DAYS || '3650', 10);
|
||||
|
||||
const needKey = !fs.existsSync(KEY_PATH);
|
||||
const needCrt = !fs.existsSync(CRT_PATH);
|
||||
|
||||
if (!needKey && !needCrt) {
|
||||
console.log(`[certs] Zertifikate existieren bereits in ${CERT_DIR}`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`[certs] Erzeuge selbstsigniertes Zertifikat für CN=${host}, ${days} Tage gültig...`);
|
||||
const attrs = [{ name: 'commonName', value: host }];
|
||||
const pems = selfsigned.generate(attrs, {
|
||||
keySize: 2048,
|
||||
days,
|
||||
algorithm: 'sha256',
|
||||
extensions: [
|
||||
{ name: 'basicConstraints', cA: true },
|
||||
{ name: 'keyUsage', keyCertSign: true, digitalSignature: true, nonRepudiation: true, keyEncipherment: true },
|
||||
{ name: 'extKeyUsage', serverAuth: true, clientAuth: true },
|
||||
{ name: 'subjectAltName', altNames: [ { type: 2, value: host }, { type: 7, ip: '127.0.0.1' } ] }
|
||||
]
|
||||
});
|
||||
|
||||
fs.writeFileSync(KEY_PATH, pems.private, { mode: 0o600 });
|
||||
fs.writeFileSync(CRT_PATH, pems.cert, { mode: 0o644 });
|
||||
|
||||
const readme = `Diese Zertifikate sind nur für lokale Entwicklung gedacht.
|
||||
|
||||
` +
|
||||
`Dateien:
|
||||
- ${KEY_PATH}
|
||||
- ${CRT_PATH}
|
||||
|
||||
` +
|
||||
`Nicht committen! Siehe .gitignore.`;
|
||||
fs.writeFileSync(path.join(CERT_DIR, 'README.txt'), readme);
|
||||
|
||||
console.log(`[certs] Zertifikate erzeugt unter ${CERT_DIR}`);
|
||||
}
|
||||
|
||||
try {
|
||||
generateIfMissing();
|
||||
} catch (err) {
|
||||
console.error('[certs] Fehler beim Erzeugen der Zertifikate:', err?.message || err);
|
||||
process.exit(0); // nicht als harter Fehler werten
|
||||
}
|
||||
Reference in New Issue
Block a user