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; |       $('.js-loading').hidden = false; | ||||||
|       var acme = ACME.create({ |       var acme = ACME.create({ | ||||||
|         Keypairs: Keypairs |         Keypairs: Keypairs | ||||||
|  |       , CSR: CSR | ||||||
|       }); |       }); | ||||||
|       acme.init('https://acme-staging-v02.api.letsencrypt.org/directory').then(function (result) { |       acme.init('https://acme-staging-v02.api.letsencrypt.org/directory').then(function (result) { | ||||||
|         console.log('acme result', result); |         console.log('acme result', result); | ||||||
| @ -137,7 +138,6 @@ | |||||||
|           accountStuff.privateJwk = privJwk; |           accountStuff.privateJwk = privJwk; | ||||||
|           accountStuff.email = email; |           accountStuff.email = email; | ||||||
|           accountStuff.acme = acme; |           accountStuff.acme = acme; | ||||||
|           $('.js-create-order').hidden = false; |  | ||||||
|         }).catch(function (err) { |         }).catch(function (err) { | ||||||
|           console.error("A bad thing happened:"); |           console.error("A bad thing happened:"); | ||||||
|           console.error(err); |           console.error(err); | ||||||
| @ -150,14 +150,24 @@ | |||||||
|       ev.preventDefault(); |       ev.preventDefault(); | ||||||
|       ev.stopPropagation(); |       ev.stopPropagation(); | ||||||
|       var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g); |       var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g); | ||||||
|       var privJwk = JSON.parse($('.js-jwk').innerText).private; |       //var privJwk = JSON.parse($('.js-jwk').innerText).private;
 | ||||||
|       return CSR({ jwk: privJwk, domains: domains }).then(function (pem) { |       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
 |           // Verify with https://www.sslshopper.com/csr-decoder.html
 | ||||||
|  |           accountStuff.csr = pem; | ||||||
|           console.log('CSR:'); |           console.log('CSR:'); | ||||||
|           console.log(pem); |           console.log(pem); | ||||||
| 
 | 
 | ||||||
|           console.log('CSR info:'); |           console.log('CSR info:'); | ||||||
|           console.log(CSR._info(pem)); |           console.log(CSR._info(pem)); | ||||||
|  |           $('.js-create-order').hidden = false; | ||||||
|  |         }); | ||||||
|       }); |       }); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
| @ -169,17 +179,13 @@ | |||||||
|       var email = accountStuff.email; |       var email = accountStuff.email; | ||||||
|       var acme = accountStuff.acme; |       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); |       var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g); | ||||||
|       return acme.certificates.create({ |       return acme.certificates.create({ | ||||||
|         accountKeypair: { privateKeyJwk: privJwk } |         accountKeypair: { privateKeyJwk: privJwk } | ||||||
|       , account: account |       , account: account | ||||||
|         , domainKeypair: { privateKeyJwk: pair.private } |       //, domainKeypair: { privateKeyJwk: accountStuff.domainPrivateJwk }
 | ||||||
|  |       , csr: accountStuff.csr | ||||||
|       , email: email |       , email: email | ||||||
|       , domains: domains |       , domains: domains | ||||||
|       , agreeToTerms: checkTos |       , agreeToTerms: checkTos | ||||||
| @ -226,7 +232,8 @@ | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       , challengeTypes: [$('input[name="acme-challenge-type"]:checked').value] |       , 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 = {}; } |   if (!me) { me = {}; } | ||||||
|   // me.debug = true;
 |   // me.debug = true;
 | ||||||
|   me.challengePrefixes = ACME.challengePrefixes; |   me.challengePrefixes = ACME.challengePrefixes; | ||||||
|   me.Keypairs = me.Keypairs || me.RSA || require('rsa-compat').RSA; |   me.Keypairs = me.Keypairs || exports.Keypairs || require('keypairs').Keypairs; | ||||||
|   me.CSR = me.CSR || require('CSR').CSR; |   me.CSR = me.CSR || exports.cSR || require('CSR').CSR; | ||||||
|   me._nonces = []; |   me._nonces = []; | ||||||
|   me._canCheck = {}; |   me._canUse = {}; | ||||||
|   if (!me._baseUrl) { |   if (!me._baseUrl) { | ||||||
|     me._baseUrl = ""; |     me._baseUrl = ""; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -238,7 +238,7 @@ CSR._info = function (der) { | |||||||
|         // TODO utf8
 |         // TODO utf8
 | ||||||
|         return Enc.bufToBin(name.value); |         return Enc.bufToBin(name.value); | ||||||
|       }); |       }); | ||||||
|     }); |     })[0]; | ||||||
|   })[0]; |   })[0]; | ||||||
| 
 | 
 | ||||||
|   return { |   return { | ||||||
|  | |||||||
| @ -186,10 +186,6 @@ Keypairs.signJws = function (opts) { | |||||||
|         , signature: Enc.bufToUrlBase64(buf) |         , signature: Enc.bufToUrlBase64(buf) | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         console.log('Signed Base64 Msg:'); |  | ||||||
|         console.log(JSON.stringify(signedMsg, null, 2)); |  | ||||||
| 
 |  | ||||||
|         console.log('msg:', msg); |  | ||||||
|         return signedMsg; |         return signedMsg; | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
| @ -263,7 +259,6 @@ Keypairs._import = function (opts) { | |||||||
|     opts.jwk.ext = true; |     opts.jwk.ext = true; | ||||||
|     opts.jwk.key_ops = ops; |     opts.jwk.key_ops = ops; | ||||||
| 
 | 
 | ||||||
|     console.log('jwk', opts.jwk); |  | ||||||
|     return window.crypto.subtle.importKey( |     return window.crypto.subtle.importKey( | ||||||
|       "jwk" |       "jwk" | ||||||
|     , opts.jwk |     , opts.jwk | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user