96 lines
2.5 KiB
JavaScript
96 lines
2.5 KiB
JavaScript
var accountKeypair = await Keypairs.generate({ kty: accKty });
|
|
if (config.debug) {
|
|
console.info('Account Key Created');
|
|
console.info(JSON.stringify(accountKeypair, null, 2));
|
|
console.info();
|
|
console.info();
|
|
}
|
|
|
|
var account = await acme.accounts.create({
|
|
agreeToTerms: agree,
|
|
// TODO detect jwk/pem/der?
|
|
accountKeypair: { privateKeyJwk: accountKeypair.private },
|
|
subscriberEmail: config.email
|
|
});
|
|
|
|
// TODO top-level agree
|
|
function agree(tos) {
|
|
if (config.debug) {
|
|
console.info('Agreeing to Terms of Service:');
|
|
console.info(tos);
|
|
console.info();
|
|
console.info();
|
|
}
|
|
agreed = true;
|
|
return Promise.resolve(tos);
|
|
}
|
|
if (config.debug) {
|
|
console.info('New Subscriber Account');
|
|
console.info(JSON.stringify(account, null, 2));
|
|
console.info();
|
|
console.info();
|
|
}
|
|
if (!agreed) {
|
|
throw new Error('Failed to ask the user to agree to terms');
|
|
}
|
|
|
|
var certKeypair = await Keypairs.generate({ kty: srvKty });
|
|
var pem = await Keypairs.export({
|
|
jwk: certKeypair.private,
|
|
encoding: 'pem'
|
|
});
|
|
if (config.debug) {
|
|
console.info('Server Key Created');
|
|
console.info('privkey.jwk.json');
|
|
console.info(JSON.stringify(certKeypair, null, 2));
|
|
// This should be saved as `privkey.pem`
|
|
console.info();
|
|
console.info('privkey.' + srvKty.toLowerCase() + '.pem:');
|
|
console.info(pem);
|
|
console.info();
|
|
}
|
|
|
|
// 'subject' should be first in list
|
|
var domains = randomDomains(rnd);
|
|
if (config.debug) {
|
|
console.info('Get certificates for random domains:');
|
|
console.info(
|
|
domains
|
|
.map(function(puny) {
|
|
var uni = punycode.toUnicode(puny);
|
|
if (puny !== uni) {
|
|
return puny + ' (' + uni + ')';
|
|
}
|
|
return puny;
|
|
})
|
|
.join('\n')
|
|
);
|
|
console.info();
|
|
}
|
|
|
|
// Create CSR
|
|
var csrDer = await CSR.csr({
|
|
jwk: certKeypair.private,
|
|
domains: domains,
|
|
encoding: 'der'
|
|
});
|
|
var csr = Enc.bufToUrlBase64(csrDer);
|
|
var csrPem = PEM.packBlock({
|
|
type: 'CERTIFICATE REQUEST',
|
|
bytes: csrDer /* { jwk: jwk, domains: opts.domains } */
|
|
});
|
|
if (config.debug) {
|
|
console.info('Certificate Signing Request');
|
|
console.info(csrPem);
|
|
console.info();
|
|
}
|
|
|
|
var results = await acme.certificates.create({
|
|
account: account,
|
|
accountKeypair: { privateKeyJwk: accountKeypair.private },
|
|
csr: csr,
|
|
domains: domains,
|
|
challenges: challenges, // must be implemented
|
|
customerEmail: null
|
|
});
|