WIP Building out all features necessary for Let's Encrypt #6
							
								
								
									
										29
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								app.js
									
									
									
									
									
								
							| @ -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); | ||||
| @ -137,7 +138,6 @@ | ||||
|           accountStuff.privateJwk = privJwk; | ||||
|           accountStuff.email = email; | ||||
|           accountStuff.acme = acme; | ||||
|           $('.js-create-order').hidden = false; | ||||
|         }).catch(function (err) { | ||||
|           console.error("A bad thing happened:"); | ||||
|           console.error(err); | ||||
| @ -150,14 +150,24 @@ | ||||
|       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) { | ||||
|       //var privJwk = JSON.parse($('.js-jwk').innerText).private;
 | ||||
|       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 CSR({ jwk: pair.private, 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)); | ||||
|           $('.js-create-order').hidden = false; | ||||
|         }); | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
| @ -169,17 +179,13 @@ | ||||
|       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 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,7 +232,8 @@ | ||||
|           } | ||||
|         } | ||||
|       , challengeTypes: [$('input[name="acme-challenge-type"]:checked').value] | ||||
|         }); | ||||
|       }).catch(function (err) { | ||||
|         window.alert("failed! " + err.message || JSON.stringify(err)); | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|  | ||||
| @ -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 = ""; | ||||
|   } | ||||
|  | ||||
| @ -238,7 +238,7 @@ CSR._info = function (der) { | ||||
|         // TODO utf8
 | ||||
|         return Enc.bufToBin(name.value); | ||||
|       }); | ||||
|     }); | ||||
|     })[0]; | ||||
|   })[0]; | ||||
| 
 | ||||
|   return { | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user