node-http-server

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 7  →  ?path2? @ 8
/src/certs.js
@@ -0,0 +1,80 @@
#!/usr/bin/env node
///////////////////////////////////////////////////////////////////////////
// Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3 //
///////////////////////////////////////////////////////////////////////////
 
const forge = require('node-forge');
const moment = require('moment');
 
module.exports = {
// Generate certificates on the fly using incremental serials.
generateCertificates: (name, domain, keySize, callback) => {
process.nextTick(() => {
// Generate 1024-bit key-pair.
const keys = forge
.pki
.rsa
.generateKeyPair(keySize);
// Create self-signed certificate.
const cert = forge
.pki
.createCertificate();
cert.serialNumber = moment().format('x');
cert.publicKey = keys.publicKey;
cert
.validity
.notBefore = moment().toDate();
cert
.validity
.notAfter
.setFullYear(
cert
.validity
.notBefore
.getFullYear() + 1
);
cert.setSubject([{
name: 'commonName',
value: domain
}, {
name: 'organizationName',
value: name
}]);
cert.setIssuer([{
name: 'commonName',
value: domain
}, {
name: 'organizationName',
value: name
}]);
 
// Self-sign certificate.
cert.sign(
keys.privateKey,
forge
.md
.sha256
.create()
);
 
// Summon the callback with the certificate block.
callback({
privateKey: forge
.pki
.privateKeyToPem(
keys
.privateKey
),
publicKey: forge
.pki
.publicKeyToPem(
keys
.publicKey
),
certificate: forge
.pki
.certificateToPem(cert)
});
});
}
};