mirror of
				https://github.com/therootcompany/greenlock.js.git
				synced 2025-10-31 12:02:47 +00:00 
			
		
		
		
	nix scraps
This commit is contained in:
		
							parent
							
								
									015259c996
								
							
						
					
					
						commit
						25475328fb
					
				
							
								
								
									
										202
									
								
								scraps/README.md
									
									
									
									
									
								
							
							
						
						
									
										202
									
								
								scraps/README.md
									
									
									
									
									
								
							| @ -1,202 +0,0 @@ | |||||||
| Scraps |  | ||||||
| ====== |  | ||||||
| 
 |  | ||||||
| These are examples that we might come back and update (and would love help updating), |  | ||||||
| but they are more likely to cause confusion than success for the casual googled-it-and-got-here-er. |  | ||||||
| 
 |  | ||||||
| Probably Outdated Examples |  | ||||||
| ======== |  | ||||||
| 
 |  | ||||||
| The simplest example of setting up a webserver appropriately is probably `letsencrypt-cli` (~120 lines of code): |  | ||||||
| 
 |  | ||||||
| * [letsencrypt-cli//lib/standalone.js](https://github.com/Daplie/node-letsencrypt-cli/blob/master/lib/standalone.js) |  | ||||||
| 
 |  | ||||||
| Similary, `letsencrypt-cli`'s usage of `le.register()` is fairly simple (~75 lines of code): |  | ||||||
| 
 |  | ||||||
| * [letsencrypt-cli/bin/letsencrypt.js](https://github.com/Daplie/node-letsencrypt-cli/blob/master/bin/letsencrypt.js) |  | ||||||
| 
 |  | ||||||
| ### One-Time Registration |  | ||||||
| 
 |  | ||||||
| Register a 90-day certificate manually, on a whim |  | ||||||
| 
 |  | ||||||
| **Note**: We've been running a fast development cycle and this example may be out of date. |  | ||||||
| The API *shouldn't* have changed much but, we probably need to come back and update it. |  | ||||||
| 
 |  | ||||||
| #### Snippets |  | ||||||
| 
 |  | ||||||
| [`commandline-minimal`](https://github.com/Daplie/node-letsencrypt/blob/master/examples/commandline-minimal.js): |  | ||||||
| 
 |  | ||||||
| **Part 1: the Let's Encrypt client**: |  | ||||||
| ```javascript |  | ||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var LE = require('letsencrypt'); |  | ||||||
| var config = require('./config-minimal'); |  | ||||||
| 
 |  | ||||||
| // Note: you should make this special dir in your product and leave it empty |  | ||||||
| config.le.webrootPath = __dirname + '/../tests/acme-challenge'; |  | ||||||
| config.le.server = LE.stagingServer; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // |  | ||||||
| // Manual Registration |  | ||||||
| // |  | ||||||
| var le = LE.create(config.backend, config.le); |  | ||||||
| le.register({ |  | ||||||
|   agreeTos: true |  | ||||||
| , domains: ['example.com']          // CHANGE TO YOUR DOMAIN |  | ||||||
| , email: 'user@email.com'           // CHANGE TO YOUR EMAIL |  | ||||||
| }, function (err) { |  | ||||||
|   if (err) { |  | ||||||
|     console.error('[Error]: node-letsencrypt/examples/standalone'); |  | ||||||
|     console.error(err.stack); |  | ||||||
|   } else { |  | ||||||
|     console.log('success'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   plainServer.close(); |  | ||||||
|   tlsServer.close(); |  | ||||||
| }); |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| **Part 2: Express Web Server**: |  | ||||||
| ```javascript |  | ||||||
| // |  | ||||||
| // Express App |  | ||||||
| // |  | ||||||
| var app = require('express')(); |  | ||||||
| app.use('/', le.middleware());  // TODO le.middleware was moved to letsencrypt-express, we need to update the docs here |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // |  | ||||||
| // HTTP & HTTPS servers |  | ||||||
| // (required for domain validation) |  | ||||||
| // |  | ||||||
| var plainServer = require('http').createServer(app).listen(config.plainPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var tlsServer = require('https').createServer({ |  | ||||||
|   key: config.tlsKey |  | ||||||
| , cert: config.tlsCert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }, app).listen(config.tlsPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| #### Runnable Demo |  | ||||||
| 
 |  | ||||||
| * [commandline (standalone with "webroot")](https://github.com/Daplie/node-letsencrypt/blob/master/examples/commandline.js) |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| # manual standalone registration via commandline |  | ||||||
| # (runs against testing server on tls port 5001) |  | ||||||
| node examples/commandline.js example.com,www.example.com user@example.net agree |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Express |  | ||||||
| 
 |  | ||||||
| Fully Automatic HTTPS with ExpressJS using Free SSL certificates from Let's Encrypt |  | ||||||
| 
 |  | ||||||
| #### Snippets |  | ||||||
| 
 |  | ||||||
| * [Minimal ExpressJS Example](https://github.com/Daplie/node-letsencrypt/blob/master/examples/express-minimal.js) |  | ||||||
| 
 |  | ||||||
| ```javascript |  | ||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var LE = require('letsencrypt'); |  | ||||||
| var config = require('./config-minimal'); |  | ||||||
| 
 |  | ||||||
| // Note: you should make this special dir in your product and leave it empty |  | ||||||
| config.le.webrootPath = __dirname + '/../tests/acme-challenge'; |  | ||||||
| config.le.server = LE.stagingServer; |  | ||||||
| 
 |  | ||||||
| // |  | ||||||
| // Automatically Register / Renew Domains |  | ||||||
| // |  | ||||||
| var le = LE.create(config.backend, config.le, { |  | ||||||
|   sniRegisterCallback: function (args, expiredCert, cb) { |  | ||||||
|     // Security: check that this is actually a subdomain we allow |  | ||||||
|     // (otherwise an attacker can cause you to rate limit against the LE server) |  | ||||||
| 
 |  | ||||||
|     var hostname = args.domains[0]; |  | ||||||
|     if (!/\.example\.com$/.test(hostname)) { |  | ||||||
|       console.error("bad domain '" + hostname + "', not a subdomain of example.com"); |  | ||||||
|       cb(nul, null); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // agree to the LE TOS for this domain |  | ||||||
|     args.agreeTos = true; |  | ||||||
|     args.email = 'user@example.com'; |  | ||||||
| 
 |  | ||||||
|     // use the cert even though it's expired |  | ||||||
|     if (expiredCert) { |  | ||||||
|       cb(null, expiredCert); |  | ||||||
|       cb = function () { /*ignore*/ }; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // register / renew the certificate in the background |  | ||||||
|     le.register(args, cb); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // |  | ||||||
| // Express App |  | ||||||
| // |  | ||||||
| var app = require('express')(); |  | ||||||
| app.use('/', le.middleware()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // |  | ||||||
| // HTTP & HTTPS servers |  | ||||||
| // |  | ||||||
| require('http').createServer(app).listen(config.plainPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| require('https').createServer({ |  | ||||||
|   key: config.tlsKey |  | ||||||
| , cert: config.tlsCert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }, app).listen(config.tlsPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| #### Runnable Example |  | ||||||
| 
 |  | ||||||
| * [Full ExpressJS Example](https://github.com/Daplie/node-letsencrypt/blob/master/examples/express.js) |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| # clear out the certificates |  | ||||||
| rm -rf tests/letsencrypt.* |  | ||||||
| 
 |  | ||||||
| # automatic registration and renewal (certs install as you visit the site for the first time) |  | ||||||
| # (runs against testing server on tls port 5001) |  | ||||||
| node examples/express.js example.com,www.example.com user@example.net agree |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| # this will take a moment because it won't respond to the tls sni header until it gets the certs |  | ||||||
| curl https://example.com/ |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### non-root |  | ||||||
| 
 |  | ||||||
| If you want to run this as non-root, you can. |  | ||||||
| 
 |  | ||||||
| You just have to set node to be allowed to use root ports |  | ||||||
| 
 |  | ||||||
| ``` |  | ||||||
| # node |  | ||||||
| sudo setcap cap_net_bind_service=+ep /usr/local/bin/node |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| and then make sure to set all of of the following to a directory that your user is permitted to write to |  | ||||||
| 
 |  | ||||||
| * `webrootPath` |  | ||||||
| * `configDir` |  | ||||||
| 
 |  | ||||||
| @ -1,53 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var LE = require('../'); |  | ||||||
| var config = require('./config-minimal'); |  | ||||||
| 
 |  | ||||||
| // Note: you should make this special dir in your product and leave it empty
 |  | ||||||
| config.le.webrootPath = __dirname + '/../tests/acme-challenge'; |  | ||||||
| config.le.server = LE.stagingServer; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // Manual Registration
 |  | ||||||
| //
 |  | ||||||
| var le = LE.create(config.le); |  | ||||||
| le.register({ |  | ||||||
|   agreeTos: true |  | ||||||
| , domains: [process.argv[3] || 'example.com']      // CHANGE TO YOUR DOMAIN
 |  | ||||||
| , email: process.argv[2] || 'user@example.com'     // CHANGE TO YOUR EMAIL
 |  | ||||||
| }, function (err) { |  | ||||||
|   if (err) { |  | ||||||
|     console.error('[Error]: node-letsencrypt/examples/standalone'); |  | ||||||
|     console.error(err.stack); |  | ||||||
|   } else { |  | ||||||
|     console.log('success'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   plainServer.close(); |  | ||||||
|   tlsServer.close(); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // Express App
 |  | ||||||
| //
 |  | ||||||
| var app = require('express')(); |  | ||||||
| app.use('/', le.middleware()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // HTTP & HTTPS servers
 |  | ||||||
| // (required for domain validation)
 |  | ||||||
| //
 |  | ||||||
| var plainServer = require('http').createServer(app).listen(config.plainPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var tlsServer = require('https').createServer({ |  | ||||||
|   key: config.tlsKey |  | ||||||
| , cert: config.tlsCert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }, app).listen(config.tlsPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| @ -1,87 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var conf = { |  | ||||||
|   domains: process.argv[2] |  | ||||||
| , email: process.argv[3] |  | ||||||
| , agree: process.argv[4] |  | ||||||
| }; |  | ||||||
| var port = 80; |  | ||||||
| var tlsPort = 5001; |  | ||||||
| 
 |  | ||||||
| if (!conf.domains || !conf.email || !conf.agree) { |  | ||||||
|   console.error("Usage: letsencrypt <domain1,domain2> <email> agree"); |  | ||||||
|   console.error("Example: letsencrypt example.com,www.example.com user@example.com agree"); |  | ||||||
|   return; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var LE = require('../'); |  | ||||||
| var path = require('path'); |  | ||||||
| // backend-specific defaults will be passed through
 |  | ||||||
| // Note: Since agreeTos is a legal agreement, I would suggest not accepting it by default
 |  | ||||||
| var bkDefaults = { |  | ||||||
|   webrootPath: path.join(__dirname, '..', 'tests', 'acme-challenge') |  | ||||||
| , fullchainTpl: '/live/:hostname/fullchain.pem' |  | ||||||
| , privkeyTpl: '/live/:hostname/privkey.pem' |  | ||||||
| , configDir: path.join(__dirname, '..', 'tests', 'letsencrypt.config') |  | ||||||
| , server: LE.stagingServer |  | ||||||
| 
 |  | ||||||
| // backend-specific
 |  | ||||||
| , logsDir: path.join(__dirname, '..', 'tests', 'letsencrypt.logs') |  | ||||||
| , workDir: path.join(__dirname, '..', 'tests', 'letsencrypt.work') |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| var le = LE.create(bkDefaults, { |  | ||||||
| /* |  | ||||||
|   setChallenge: function (hostnames, key, value, cb) { |  | ||||||
|     // the python backend needs fs.watch implemented
 |  | ||||||
|     // before this would work (and even then it would be difficult)
 |  | ||||||
|   } |  | ||||||
| , getChallenge: function (hostnames, key, cb) { |  | ||||||
|     //
 |  | ||||||
|   } |  | ||||||
| , sniRegisterCallback: function (args, certInfo, cb) { |  | ||||||
| 
 |  | ||||||
|   } |  | ||||||
| , registrationFailureCallback: function (args, certInfo, cb) { |  | ||||||
|     what do to when a backgrounded registration fails |  | ||||||
|   } |  | ||||||
| */ |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var localCerts = require('localhost.daplie.com-certificates'); |  | ||||||
| var express = require('express'); |  | ||||||
| var app = express(); |  | ||||||
| 
 |  | ||||||
| app.use('/', le.middleware()); |  | ||||||
| 
 |  | ||||||
| var server = require('http').createServer(); |  | ||||||
| server.on('request', app); |  | ||||||
| server.listen(port, function () { |  | ||||||
|   console.log('Listening http', server.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var tlsServer = require('https').createServer({ |  | ||||||
|   key: localCerts.key |  | ||||||
| , cert: localCerts.cert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }); |  | ||||||
| tlsServer.on('request', app); |  | ||||||
| tlsServer.listen(tlsPort, function () { |  | ||||||
|   console.log('Listening http', tlsServer.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| le.register({ |  | ||||||
|   agreeTos: 'agree' === conf.agree |  | ||||||
| , domains: conf.domains.split(',') |  | ||||||
| , email: conf.email |  | ||||||
| }, function (err) { |  | ||||||
|   if (err) { |  | ||||||
|     console.error('[Error]: node-letsencrypt/examples/standalone'); |  | ||||||
|     console.error(err.stack); |  | ||||||
|   } else { |  | ||||||
|     console.log('success'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   server.close(); |  | ||||||
|   tlsServer.close(); |  | ||||||
| }); |  | ||||||
| @ -1,26 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var path = require('path'); |  | ||||||
| 
 |  | ||||||
| var config = { |  | ||||||
| 
 |  | ||||||
|   plainPort: 80 |  | ||||||
| , tlsPort: 5001 // 5001 for testing, normally 443
 |  | ||||||
| , tlsKey: require('localhost.daplie.com-certificates').key |  | ||||||
| , tlsCert: require('localhost.daplie.com-certificates').cert |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| , le: { |  | ||||||
|     webrootPath: path.join(__dirname, '..', 'tests', 'acme-challenge') |  | ||||||
|   , fullchainTpl: '/live/:hostname/fullchain.pem' |  | ||||||
|   , privkeyTpl: '/live/:hostname/privkey.pem' |  | ||||||
|   , configDir: path.join(__dirname, '..', 'tests', 'letsencrypt.config') |  | ||||||
| 
 |  | ||||||
|     // these are specific to the python client and won't be needed with the purejs library
 |  | ||||||
|   , logsDir: path.join(__dirname, '..', 'tests', 'letsencrypt.logs') |  | ||||||
|   , workDir: path.join(__dirname, '..', 'tests', 'letsencrypt.work') |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| module.exports = config; |  | ||||||
| @ -1,57 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var LE = require('../'); |  | ||||||
| var config = require('./config-minimal'); |  | ||||||
| 
 |  | ||||||
| // Note: you should make this special dir in your product and leave it empty
 |  | ||||||
| config.le.webrootPath = __dirname + '/../tests/acme-challenge'; |  | ||||||
| config.le.server = LE.stagingServer; |  | ||||||
| 
 |  | ||||||
| var le = LE.create(config.le, { |  | ||||||
|   sniRegisterCallback: function (args, expiredCert, cb) { |  | ||||||
|     // In theory you should never get an expired certificate because
 |  | ||||||
|     // the certificates automatically renew in the background starting
 |  | ||||||
|     // about a week before they expire.
 |  | ||||||
|     // (the default behavior is to randomly stagger renewals)
 |  | ||||||
|     // so in this case we'll just return the expired certificate
 |  | ||||||
|     if (expiredCert) { return cb(null, expiredCert); } |  | ||||||
| 
 |  | ||||||
|     // If we get here that means this domain hasn't been registered yet
 |  | ||||||
|     // Security Warning: you should either manually register domains
 |  | ||||||
|     // and return null here or check that the sni header isn't being
 |  | ||||||
|     // spoofed and this is actually a domain you own before registering
 |  | ||||||
|     //
 |  | ||||||
|     //   cb(null, null);
 |  | ||||||
| 
 |  | ||||||
|     var hostname = args.domains[0]; |  | ||||||
|     console.log("[TODO] check that '" + hostname + "' is one I expect"); |  | ||||||
| 
 |  | ||||||
|     args.agreeTos = true; |  | ||||||
|     args.email = 'user@example.com'; |  | ||||||
| 
 |  | ||||||
|     le.register(args, cb); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // Express App
 |  | ||||||
| //
 |  | ||||||
| var app = require('express')(); |  | ||||||
| app.use('/', le.middleware()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // HTTP & HTTPS servers
 |  | ||||||
| //
 |  | ||||||
| require('http').createServer(app).listen(config.plainPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| require('https').createServer({ |  | ||||||
|   key: config.tlsKey |  | ||||||
| , cert: config.tlsCert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }, app).listen(config.tlsPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| @ -1,87 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var conf = { |  | ||||||
|   domains: (process.argv[2]||'').split(',') |  | ||||||
| , email: process.argv[3] |  | ||||||
| , agree: 'agree' === process.argv[4] |  | ||||||
| }; |  | ||||||
| var port = 80; |  | ||||||
| var tlsPort = 5001; |  | ||||||
| 
 |  | ||||||
| if (!conf.domains || !conf.email || !conf.agree) { |  | ||||||
|   console.error("Usage: node examples/express <domain1,domain2> <email> agree"); |  | ||||||
|   console.error("Example: node examples/express example.com,www.example.com user@example.com agree"); |  | ||||||
|   return; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var LE = require('../'); |  | ||||||
| var path = require('path'); |  | ||||||
| // backend-specific defaults will be passed through
 |  | ||||||
| // Note: Since agreeTos is a legal agreement, I would suggest not accepting it by default
 |  | ||||||
| var bkDefaults = { |  | ||||||
|   webrootPath: path.join(__dirname, '..', 'tests', 'acme-challenge') |  | ||||||
| , fullchainTpl: '/live/:hostname/fullchain.pem' |  | ||||||
| , privkeyTpl: '/live/:hostname/privkey.pem' |  | ||||||
| , configDir: path.join(__dirname, '..', 'tests', 'letsencrypt.config') |  | ||||||
| , server: LE.stagingServer |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| var le = LE.create(LEP, bkDefaults, { |  | ||||||
|   sniRegisterCallback: function (args, certInfo, cb) { |  | ||||||
|     var allowedDomains = conf.domains; // require('../tests/config').allowedDomains;
 |  | ||||||
| 
 |  | ||||||
|     // let the renewal take place in the background
 |  | ||||||
|     if (certInfo && certInfo.context) { |  | ||||||
|       cb(null, certInfo); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // verify that these are domains we allow to register on our server
 |  | ||||||
|     if (args.domains.length && args.domains.every(function (hostname) { |  | ||||||
|       hostname = hostname.toLowerCase(); |  | ||||||
|       return (-1 !== allowedDomains.indexOf(hostname)); |  | ||||||
|     })) { |  | ||||||
|       // wait for registration before responding
 |  | ||||||
|       args.agreeTos = conf.agree; |  | ||||||
|       args.email = conf.email; // you'd want to lookup which user has this email
 |  | ||||||
|       le.register(args, cb); |  | ||||||
|     } else { |  | ||||||
|       // I don't know where this error goes (SNICallback)... but at least we put it somewhere
 |  | ||||||
|       cb(new Error("SNI came in for (an) unrecognized domain(s): '" + args.domains + "'")); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| /* |  | ||||||
| , setChallenge: function (hostnames, key, value, cb) { |  | ||||||
|     // the python backend needs fs.watch implemented
 |  | ||||||
|     // before this would work (and even then it would be difficult)
 |  | ||||||
|   } |  | ||||||
| , getChallenge: function (hostnames, key, cb) { |  | ||||||
|     //
 |  | ||||||
|   } |  | ||||||
| , registrationFailureCallback: function (args, certInfo, cb) { |  | ||||||
|     what do to when a backgrounded registration fails |  | ||||||
|   } |  | ||||||
| */ |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var localCerts = require('localhost.daplie.com-certificates'); |  | ||||||
| var express = require('express'); |  | ||||||
| var app = express(); |  | ||||||
| 
 |  | ||||||
| app.use('/', le.middleware()); |  | ||||||
| 
 |  | ||||||
| var server = require('http').createServer(); |  | ||||||
| server.on('request', app); |  | ||||||
| server.listen(port, function () { |  | ||||||
|   console.log('Listening http', server.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var tlsServer = require('https').createServer({ |  | ||||||
|   key: localCerts.key |  | ||||||
| , cert: localCerts.cert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }); |  | ||||||
| tlsServer.on('request', app); |  | ||||||
| tlsServer.listen(tlsPort, function () { |  | ||||||
|   console.log('Listening http', tlsServer.address()); |  | ||||||
| }); |  | ||||||
| @ -1,80 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var fs = require('fs'); |  | ||||||
| var crypto = require('crypto'); |  | ||||||
| var ursa = require('ursa'); |  | ||||||
| 
 |  | ||||||
| // Here are all the places you can discover the account id:
 |  | ||||||
| //
 |  | ||||||
| // letsencrypt/account.py
 |  | ||||||
| //
 |  | ||||||
| // /etc/letsencrypt/accounts/{{ server }}/directory/{{ accountId }}/private_key.json
 |  | ||||||
| // /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/f4c33502df3789849f617944253b35ae/private_key.json
 |  | ||||||
| //
 |  | ||||||
| // /etc/letsencrypt/renewal/{{ hostname }}.conf
 |  | ||||||
| // /etc/letsencrypt/renewal/example.com.conf
 |  | ||||||
| //
 |  | ||||||
| // Note: each domain has its own private key
 |  | ||||||
| 
 |  | ||||||
| function fromPrivateKeyUrsa(priv, cb) { |  | ||||||
|   var pub = priv.toPublicPem(); |  | ||||||
|   var accountId = crypto.createHash('md5').update(pub).digest('hex'); |  | ||||||
| 
 |  | ||||||
|   cb(null, accountId); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function fromAccountPrivateKey(pkj, cb) { |  | ||||||
|   Object.keys(pkj).forEach(function (key) { |  | ||||||
|     pkj[key] = new Buffer(pkj[key], 'base64'); |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   var priv = ursa.createPrivateKeyFromComponents( |  | ||||||
|     pkj.n // modulus
 |  | ||||||
|   , pkj.e // exponent
 |  | ||||||
|   , pkj.p |  | ||||||
|   , pkj.q |  | ||||||
|   , pkj.dp |  | ||||||
|   , pkj.dq |  | ||||||
|   , pkj.qi |  | ||||||
|   , pkj.d |  | ||||||
|   ); |  | ||||||
| 
 |  | ||||||
|   fromPrivateKeyUrsa(priv, cb); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function fromAccountPrivateKeyFile(privateKeyPath, cb) { |  | ||||||
|   // Read ACME account key
 |  | ||||||
|   fs.readFile(privateKeyPath, 'utf8', function (err, privkeyJson) { |  | ||||||
|     var pkj; |  | ||||||
| 
 |  | ||||||
|     if (err) { |  | ||||||
|       cb(err); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     try { |  | ||||||
|       pkj = JSON.parse(privkeyJson); |  | ||||||
|     } catch(e) { |  | ||||||
|       cb(e); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     fromAccountPrivateKey(pkj, cb); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function bogusAccountId(cb) { |  | ||||||
|   var priv = ursa.generatePrivateKey(2048, 65537); |  | ||||||
| 
 |  | ||||||
|   fromPrivateKeyUrsa(priv, cb); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module.exports.bogusAccountId = bogusAccountId; |  | ||||||
| module.exports.fromAccountPrivateKey = fromAccountPrivateKey; |  | ||||||
| 
 |  | ||||||
| module.exports.bogusAccountId(function (err, id) { |  | ||||||
|   console.log('Random Account Id', id); |  | ||||||
| }); |  | ||||||
| module.exports.fromAccountPrivateKey('/etc/letsencrypt/live/example.com/privkey.pem', function (err, id) { |  | ||||||
|   console.log(id); |  | ||||||
| }); |  | ||||||
| @ -1,62 +0,0 @@ | |||||||
| cert = /etc/letsencrypt/live/example.com/cert.pem |  | ||||||
| privkey = /etc/letsencrypt/live/example.com/privkey.pem |  | ||||||
| chain = /etc/letsencrypt/live/example.com/chain.pem |  | ||||||
| fullchain = /etc/letsencrypt/live/example.com/fullchain.pem |  | ||||||
| 
 |  | ||||||
| # Options and defaults used in the renewal process |  | ||||||
| [renewalparams] |  | ||||||
| apache_enmod = a2enmod |  | ||||||
| no_verify_ssl = False |  | ||||||
| ifaces = None |  | ||||||
| apache_dismod = a2dismod |  | ||||||
| register_unsafely_without_email = False |  | ||||||
| uir = None |  | ||||||
| installer = none |  | ||||||
| config_dir = /etc/letsencrypt |  | ||||||
| text_mode = False |  | ||||||
| func = <function obtain_cert at 0x30c9500> |  | ||||||
| prepare = False |  | ||||||
| work_dir = /var/lib/letsencrypt |  | ||||||
| tos = True |  | ||||||
| init = False |  | ||||||
| http01_port = 80 |  | ||||||
| duplicate = False |  | ||||||
| key_path = None |  | ||||||
| nginx = False |  | ||||||
| fullchain_path = /home/user/letsencrypt/chain.pem |  | ||||||
| email = user@example.com |  | ||||||
| csr = None |  | ||||||
| agree_dev_preview = None |  | ||||||
| redirect = None |  | ||||||
| verbose_count = -3 |  | ||||||
| config_file = None |  | ||||||
| renew_by_default = False |  | ||||||
| hsts = False |  | ||||||
| authenticator = webroot |  | ||||||
| domains = example.com, |  | ||||||
| rsa_key_size = 2048 |  | ||||||
| checkpoints = 1 |  | ||||||
| manual_test_mode = False |  | ||||||
| apache = False |  | ||||||
| cert_path = /home/user/letsencrypt/cert.pem |  | ||||||
| webroot_path = /srv/www/example.com/, |  | ||||||
| strict_permissions = False |  | ||||||
| apache_server_root = /etc/apache2 |  | ||||||
| account = f4c33502df3789849f617944253b35ae |  | ||||||
| manual_public_ip_logging_ok = False |  | ||||||
| chain_path = /home/user/letsencrypt/chain.pem |  | ||||||
| standalone = False |  | ||||||
| manual = False |  | ||||||
| server = https://acme-v01.api.letsencrypt.org/directory |  | ||||||
| standalone_supported_challenges = "http-01,tls-sni-01" |  | ||||||
| webroot = True |  | ||||||
| apache_init_script = None |  | ||||||
| user_agent = None |  | ||||||
| apache_ctl = apache2ctl |  | ||||||
| apache_le_vhost_ext = -le-ssl.conf |  | ||||||
| debug = False |  | ||||||
| tls_sni_01_port = 443 |  | ||||||
| logs_dir = /var/log/letsencrypt |  | ||||||
| configurator = None |  | ||||||
| [[webroot_map]] |  | ||||||
| example.com = /srv/www/example.com/ |  | ||||||
| @ -1,54 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var LE = require('../'); |  | ||||||
| var config = require('./config-minimal'); |  | ||||||
| 
 |  | ||||||
| // Note: you should make this special dir in your product and leave it empty
 |  | ||||||
| config.le.webrootPath = __dirname + '/../tests/acme-challenge'; |  | ||||||
| config.le.server = LE.stagingServer; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // Manual Registration
 |  | ||||||
| //
 |  | ||||||
| var le = LE.create(config.le); |  | ||||||
| le.backend.registerAsync({ |  | ||||||
|   agreeTos: true |  | ||||||
| , domains: ['example.com']            // CHANGE TO YOUR DOMAIN
 |  | ||||||
| , email: 'user@example.com'           // CHANGE TO YOUR EMAIL
 |  | ||||||
| }, function (err, body) { |  | ||||||
|   if (err) { |  | ||||||
|     console.error('[Error]: node-letsencrypt/examples/ursa'); |  | ||||||
|     console.error(err.stack); |  | ||||||
|   } else { |  | ||||||
|     console.log('success', body); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   plainServer.close(); |  | ||||||
|   tlsServer.close(); |  | ||||||
| }).then(function () {}, function (err) { |  | ||||||
|   console.error(err.stack); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // Express App
 |  | ||||||
| //
 |  | ||||||
| var app = require('express')(); |  | ||||||
| app.use('/', le.middleware()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //
 |  | ||||||
| // HTTP & HTTPS servers
 |  | ||||||
| // (required for domain validation)
 |  | ||||||
| //
 |  | ||||||
| var plainServer = require('http').createServer(app).listen(config.plainPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| var tlsServer = require('https').createServer({ |  | ||||||
|   key: config.tlsKey |  | ||||||
| , cert: config.tlsCert |  | ||||||
| , SNICallback: le.sniCallback |  | ||||||
| }, app).listen(config.tlsPort, function () { |  | ||||||
|   console.log('Listening http', this.address()); |  | ||||||
| }); |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user