Compare commits

...

2 Commits

Author SHA1 Message Date
AJ ONeal 009e0dc1fb use pre-gen or jit-CSR 2019-05-06 19:34:17 -06:00
AJ ONeal 001667bfe0 tested with existing CSR 2019-05-06 19:21:37 -06:00
4 changed files with 45 additions and 27 deletions

57
app.js
View File

@ -122,6 +122,7 @@
$('.js-loading').hidden = false;
var acme = ACME.create({
Keypairs: Keypairs
, CSR: CSR
});
acme.init('https://acme-staging-v02.api.letsencrypt.org/directory').then(function (result) {
console.log('acme result', result);
@ -149,16 +150,7 @@
$('form.js-csr').addEventListener('submit', function (ev) {
ev.preventDefault();
ev.stopPropagation();
var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g);
var privJwk = JSON.parse($('.js-jwk').innerText).private;
return CSR({ jwk: privJwk, domains: domains }).then(function (pem) {
// Verify with https://www.sslshopper.com/csr-decoder.html
console.log('CSR:');
console.log(pem);
console.log('CSR info:');
console.log(CSR._info(pem));
});
generateCsr();
});
$('form.js-acme-order').addEventListener('submit', function (ev) {
@ -169,17 +161,14 @@
var email = accountStuff.email;
var acme = accountStuff.acme;
return Keypairs.generate({
kty: $('input[name="kty"]:checked').value
, namedCurve: $('input[name="ec-crv"]:checked').value
, modulusLength: $('input[name="rsa-len"]:checked').value
}).then(function (pair) {
console.log('domain keypair:', pair);
var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g);
return getDomainPrivkey().then(function () {
return acme.certificates.create({
accountKeypair: { privateKeyJwk: privJwk }
, account: account
, domainKeypair: { privateKeyJwk: pair.private }
//, domainKeypair: { privateKeyJwk: accountStuff.domainPrivateJwk }
, csr: accountStuff.csr
, email: email
, domains: domains
, agreeToTerms: checkTos
@ -226,6 +215,8 @@
}
}
, challengeTypes: [$('input[name="acme-challenge-type"]:checked').value]
}).catch(function (err) {
window.alert("failed! " + err.message || JSON.stringify(err));
});
});
});
@ -233,5 +224,37 @@
$('.js-generate').hidden = false;
}
function getDomainPrivkey() {
if (accountStuff.domainPrivateJwk) { return Promise.resolve(accountStuff.domainPrivateJwk); }
return Keypairs.generate({
kty: $('input[name="kty"]:checked').value
, namedCurve: $('input[name="ec-crv"]:checked').value
, modulusLength: $('input[name="rsa-len"]:checked').value
}).then(function (pair) {
console.log('domain keypair:', pair);
accountStuff.domainPrivateJwk = pair.private;
return pair.private;
});
}
function generateCsr() {
var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g);
//var privJwk = JSON.parse($('.js-jwk').innerText).private;
return getDomainPrivkey().then(function (privJwk) {
accountStuff.domainPrivateJwk = privJwk;
return CSR({ jwk: privJwk, domains: domains }).then(function (pem) {
// Verify with https://www.sslshopper.com/csr-decoder.html
accountStuff.csr = pem;
console.log('CSR:');
console.log(pem);
console.log('CSR info:');
console.log(CSR._info(pem));
return pem;
});
});
}
window.addEventListener('load', run);
}());

View File

@ -848,10 +848,10 @@ ACME.create = function create(me) {
if (!me) { me = {}; }
// me.debug = true;
me.challengePrefixes = ACME.challengePrefixes;
me.Keypairs = me.Keypairs || me.RSA || require('rsa-compat').RSA;
me.CSR = me.CSR || require('CSR').CSR;
me.Keypairs = me.Keypairs || exports.Keypairs || require('keypairs').Keypairs;
me.CSR = me.CSR || exports.cSR || require('CSR').CSR;
me._nonces = [];
me._canCheck = {};
me._canUse = {};
if (!me._baseUrl) {
me._baseUrl = "";
}

View File

@ -238,7 +238,7 @@ CSR._info = function (der) {
// TODO utf8
return Enc.bufToBin(name.value);
});
});
})[0];
})[0];
return {

View File

@ -186,10 +186,6 @@ Keypairs.signJws = function (opts) {
, signature: Enc.bufToUrlBase64(buf)
};
console.log('Signed Base64 Msg:');
console.log(JSON.stringify(signedMsg, null, 2));
console.log('msg:', msg);
return signedMsg;
});
}
@ -263,7 +259,6 @@ Keypairs._import = function (opts) {
opts.jwk.ext = true;
opts.jwk.key_ops = ops;
console.log('jwk', opts.jwk);
return window.crypto.subtle.importKey(
"jwk"
, opts.jwk