mirror of
https://github.com/certd/certd.git
synced 2026-04-14 04:20:52 +08:00
Small crypto docs fix 2 Small crypto docs fix Bump v5.3.1 Discourage use of cert subject common name, examples and docs Style refactor docs and examples Bump dependencies
89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
/**
|
|
* Example using dns-01 challenge to generate certificates
|
|
*
|
|
* NOTE: This example is incomplete as the DNS challenge response implementation
|
|
* will be specific to your DNS providers API.
|
|
*
|
|
* NOTE: This example does not order certificates on-demand, as solving dns-01
|
|
* will likely be too slow for it to make sense. Instead, it orders a wildcard
|
|
* certificate on init before starting the HTTPS server as a demonstration.
|
|
*/
|
|
|
|
const https = require('https');
|
|
const acme = require('./../../');
|
|
|
|
const HTTPS_SERVER_PORT = 443;
|
|
const WILDCARD_DOMAIN = 'example.com';
|
|
|
|
function log(m) {
|
|
process.stdout.write(`${(new Date()).toISOString()} ${m}\n`);
|
|
}
|
|
|
|
/**
|
|
* Main
|
|
*/
|
|
|
|
(async () => {
|
|
try {
|
|
/**
|
|
* Initialize ACME client
|
|
*/
|
|
|
|
log('Initializing ACME client');
|
|
const client = new acme.Client({
|
|
directoryUrl: acme.directory.letsencrypt.staging,
|
|
accountKey: await acme.crypto.createPrivateKey(),
|
|
});
|
|
|
|
/**
|
|
* Order wildcard certificate
|
|
*/
|
|
|
|
log(`Creating CSR for ${WILDCARD_DOMAIN}`);
|
|
const [key, csr] = await acme.crypto.createCsr({
|
|
altNames: [WILDCARD_DOMAIN, `*.${WILDCARD_DOMAIN}`],
|
|
});
|
|
|
|
log(`Ordering certificate for ${WILDCARD_DOMAIN}`);
|
|
const cert = await client.auto({
|
|
csr,
|
|
email: 'test@example.com',
|
|
termsOfServiceAgreed: true,
|
|
challengePriority: ['dns-01'],
|
|
challengeCreateFn: (authz, challenge, keyAuthorization) => {
|
|
/* TODO: Implement this */
|
|
log(`[TODO] Add TXT record key=_acme-challenge.${authz.identifier.value} value=${keyAuthorization}`);
|
|
},
|
|
challengeRemoveFn: (authz, challenge, keyAuthorization) => {
|
|
/* TODO: Implement this */
|
|
log(`[TODO] Remove TXT record key=_acme-challenge.${authz.identifier.value} value=${keyAuthorization}`);
|
|
},
|
|
});
|
|
|
|
log(`Certificate for ${WILDCARD_DOMAIN} created successfully`);
|
|
|
|
/**
|
|
* HTTPS server
|
|
*/
|
|
|
|
const requestListener = (req, res) => {
|
|
log(`HTTP 200 ${req.headers.host}${req.url}`);
|
|
res.writeHead(200);
|
|
res.end('Hello world\n');
|
|
};
|
|
|
|
const httpsServer = https.createServer({
|
|
key,
|
|
cert,
|
|
}, requestListener);
|
|
|
|
httpsServer.listen(HTTPS_SERVER_PORT, () => {
|
|
log(`HTTPS server listening on port ${HTTPS_SERVER_PORT}`);
|
|
});
|
|
}
|
|
catch (e) {
|
|
log(`[FATAL] ${e.message}`);
|
|
process.exit(1);
|
|
}
|
|
})();
|