mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	simplify
This commit is contained in:
		
							parent
							
								
									200ffa805d
								
							
						
					
					
						commit
						2a73771ed6
					
				
							
								
								
									
										125
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								README.md
									
									
									
									
									
								
							| @ -6,6 +6,7 @@ Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, | ||||
|   * **registrations** require an **approval callback** in *production* | ||||
| * Automatic Renewal (around 80 days) | ||||
|   * **renewals** are *fully automatic* and happen in the *background*, with **no downtime** | ||||
| * Automatic vhost / virtual hosting | ||||
| 
 | ||||
| All you have to do is start the webserver and then visit it at it's domain name. | ||||
| 
 | ||||
| @ -17,17 +18,19 @@ npm install --save letsencrypt-express | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| * standalone | ||||
| * express | ||||
| * http / https | ||||
| * http / http2 | ||||
| * koa | ||||
| 
 | ||||
| ### Setup | ||||
| 
 | ||||
| ```javascript | ||||
| 'use strict'; | ||||
| 
 | ||||
| // Note: using staging server url, remove .testing() for production | ||||
| var lex = require('letsencrypt-express').testing(); | ||||
| 
 | ||||
| // A happy little express app | ||||
| var app = require('express')(); | ||||
| app.use(function (req, res) { | ||||
|   res.send({ success: true }); | ||||
| }); | ||||
| var LEX = require('letsencrypt-express').testing(); | ||||
| 
 | ||||
| function approveRegistration(hostname, cb) { | ||||
|   // Note: this is the place to check your database to get the user associated with this domain | ||||
| @ -38,17 +41,10 @@ function approveRegistration(hostname, cb) { | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| lex.create({ | ||||
|   configDir: '/etc/letsencrypt' | ||||
| , onRequest: app | ||||
| var lex = LEX.create({ | ||||
|   configDir: require('os').homedir() + '/letsencrypt/etc' | ||||
| , approveRegistration: approveRegistration                  // leave `null` to disable automatic registration | ||||
| }).listen([80], [443, 5001], function () { | ||||
|   console.log("ENCRYPT __ALL__ THE DOMAINS!"); | ||||
| }); | ||||
| 
 | ||||
| // NOTE: | ||||
| // `~/letsencrypt/etc` is the default `configDir` | ||||
| // ports 80, 443, and 5001 are the default ports to listen on. | ||||
| ``` | ||||
| 
 | ||||
| **WARNING**: If you don't do any checks and simply complete `approveRegistration` callback, an attacker will spoof SNI packets with bad hostnames and that will cause you to be rate-limited and or blocked from the ACME server. | ||||
| @ -65,33 +61,49 @@ letsencrypt certonly --standalone \ | ||||
| 
 | ||||
| Note: the `--webrootPath` option is also available if you don't want to shut down your webserver to get the cert. | ||||
| 
 | ||||
| ## Examples | ||||
| ### Standalone | ||||
| 
 | ||||
| * https / express | ||||
| * http2 / express | ||||
| * koa | ||||
| ```javascript | ||||
| lex.onRequest = function (req, res) { | ||||
|   res.end('Hello, World!'); | ||||
| }; | ||||
| 
 | ||||
| lex.listen([80], [443, 5001], function () { | ||||
|   console.log("ENCRYPT __ALL__ THE DOMAINS!"); | ||||
| }); | ||||
| 
 | ||||
| // NOTE: | ||||
| // `~/letsencrypt/etc` is the default `configDir` | ||||
| // ports 80, 443, and 5001 are the default ports to listen on. | ||||
| ``` | ||||
| 
 | ||||
| ## Express | ||||
| 
 | ||||
| ```javascript | ||||
| // A happy little express app | ||||
| var app = require('express')(); | ||||
| 
 | ||||
| app.use(function (req, res) { | ||||
|   res.send({ success: true }); | ||||
| }); | ||||
| 
 | ||||
| lex.onRequest = app; | ||||
| 
 | ||||
| lex.listen([80], [443, 5001], function () { | ||||
|   var protocol = ('requestCert' in this) ? 'https': 'http'; | ||||
|   console.log("Listening at " + protocol + '://localhost:' + this.address().port); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| ### Use with raw http / https modules | ||||
| 
 | ||||
| Let's say you want to redirect all http to https. | ||||
| 
 | ||||
| ```javascript | ||||
| var LEX = require('letsencrypt-express'); | ||||
| var http = require('http'); | ||||
| var https = require('http2'); | ||||
| // NOTE: you could use the old https module if for some reason you don't want to support modern browsers | ||||
| 
 | ||||
| var lex = LEX.create({ | ||||
|   configDir: __dirname + '/letsencrypt.config' | ||||
| , approveRegistration: function (hostname, cb) { | ||||
|     cb(null, { | ||||
|       domains: [hostname] | ||||
|     , email: 'CHANGE_ME' // 'user@example.com' | ||||
|     , agreeTos: true | ||||
|     }); | ||||
|   } | ||||
| }); | ||||
| 
 | ||||
| function redirectHttp() { | ||||
|   http.createServer(LEX.createAcmeResponder(lex, function redirectHttps(req, res) { | ||||
|     res.setHeader('Location', 'https://' + req.headers.host + req.url); | ||||
| @ -113,49 +125,19 @@ redirectHttp(); | ||||
| serveHttps(); | ||||
| ``` | ||||
| 
 | ||||
| In short these are the only functions you need to be aware of: | ||||
| 
 | ||||
| * `LEX.create(opts)` | ||||
|   * `{ configDir: pathname, approveRegistration: func }` | ||||
| * `LEX.createAcmeResponder(lex, onRequest)` | ||||
| 
 | ||||
| ### Using with Koa | ||||
| ### Let's Encrypt with Koa | ||||
| 
 | ||||
| ```javascript | ||||
| 'use strict'; | ||||
| 
 | ||||
| // Note: using staging server url, remove .testing() for production | ||||
| var lex = require('letsencrypt-express').testing(); | ||||
| var koa = require('koa'); | ||||
| var app = koa(); | ||||
| 
 | ||||
| 
 | ||||
| app.use(function *(){ | ||||
| app.use(function *() { | ||||
|   this.body = 'Hello World'; | ||||
| }); | ||||
| 
 | ||||
| lex.create({ | ||||
|   configDir: './letsencrypt.config'                 // ~/letsencrypt, /etc/letsencrypt, whatever you want | ||||
| 
 | ||||
| , onRequest: app.callback()                         // your koa app callback | ||||
| 
 | ||||
| , letsencrypt: null                                 // you can provide you own instance of letsencrypt | ||||
|                                                     // if you need to configure it (with an agreeToTerms | ||||
|                                                     // callback, for example) | ||||
| 
 | ||||
| , approveRegistration: function (hostname, cb) {    // PRODUCTION MODE needs this function, but only if you want | ||||
|                                                     // automatic registration (usually not necessary) | ||||
|                                                     // renewals for registered domains will still be automatic | ||||
|     cb(null, { | ||||
|       domains: [hostname] | ||||
|     , email: 'user@example.com' | ||||
|     , agreeTos: true              // you | ||||
|     }); | ||||
|   } | ||||
| }).listen([], [4443], function () { | ||||
|   var server = this; | ||||
|   var protocol = ('requestCert' in server) ? 'https': 'http'; | ||||
|   console.log("Listening at " + protocol + '://localhost:' + this.address().port); | ||||
| var server = require('http2').createServer(lex.httpsOptions, LEX.createAcmeResponder(lex, app.callback())); | ||||
| server.listen(443, function () { | ||||
|  console.log('Listening at https://localhost:' + this.address().port); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| @ -165,11 +147,12 @@ Note: you don't need to create websockets for the plain ports. | ||||
| 
 | ||||
| ```javascript | ||||
| var WebSocketServer = require('ws').Server; | ||||
| var https = require('http2'); | ||||
| var server = https.createServer(lex.httpsOptions, LEX.createAcmeResponder(lex, app)); | ||||
| var wss = new WebSocketServer({ server: server }); | ||||
| 
 | ||||
| results.tlsServers.forEach(function (server) { | ||||
|   var wss = new WebSocketServer({ server: server }); | ||||
|   wss.on('connection', onConnection); | ||||
| }); | ||||
| wss.on('connection', onConnection); | ||||
| server.listen(443); | ||||
| 
 | ||||
| function onConnection(ws) { | ||||
|   var location = url.parse(ws.upgradeReq.url, true); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user