mirror of
				https://github.com/therootcompany/greenlock.js.git
				synced 2025-10-31 03:52:46 +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