| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | # New Documentation & [v2/v3 Migration Guide](https://git.rootprojects.org/root/greenlock.js/src/branch/v3/MIGRATION_GUIDE_V2_V3.md)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Greenlock v3 just came out of private beta **today** (Nov 1st, 2019). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The code is complete and we're working on great documentation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Many **examples** and **full API** documentation are still coming. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # [Greenlock Express](https://git.rootprojects.org/root/greenlock-express.js) is Let's Encrypt for Node
 | 
					
						
							| 
									
										
										
										
											2019-09-04 00:15:02 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-15 22:19:58 -06:00
										 |  |  |  | 
					
						
							| 
									
										
										
										
											2018-05-12 07:46:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | | Built by [Root](https://therootcompany.com) for [Hub](https://rootprojects.org/hub/) | 
					
						
							| 
									
										
										
										
											2018-04-20 06:43:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Free SSL, Automated HTTPS / HTTP2, served with Node via Express, Koa, hapi, etc. | 
					
						
							| 
									
										
										
										
											2018-05-10 00:53:45 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-29 23:04:32 -06:00
										 |  |  | ### Let's Encrypt for Node, Express, etc
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | Greenlock Express is a **Web Server** with **Fully Automated HTTPS** and renewals. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```js | 
					
						
							| 
									
										
										
										
											2019-11-01 04:19:32 -06:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function httpsWorker(glx) { | 
					
						
							|  |  |  | 	// Serves on 80 and 443 | 
					
						
							|  |  |  | 	// Get's SSL certificates magically! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	glx.serveApp(function(req, res) { | 
					
						
							|  |  |  | 		res.end("Hello, Encrypted World!"); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:19:32 -06:00
										 |  |  | var pkg = require("./package.json"); | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | require("greenlock-express") | 
					
						
							| 
									
										
										
										
											2019-10-29 23:04:32 -06:00
										 |  |  | 	.init(function getConfig() { | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | 		// Greenlock Config | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			package: { name: pkg.name, version: pkg.version }, | 
					
						
							|  |  |  | 			maintainerEmail: pkg.author, | 
					
						
							|  |  |  | 			cluster: false | 
					
						
							|  |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2019-10-29 23:04:32 -06:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 	.serve(httpsWorker); | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-29 23:04:32 -06:00
										 |  |  | Manage via API or the config file: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | `~/.config/greenlock/manage.json`: (default filesystem config) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-29 23:04:32 -06:00
										 |  |  | ```json | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	"subscriberEmail": "letsencrypt-test@therootcompany.com", | 
					
						
							|  |  |  | 	"agreeToTerms": true, | 
					
						
							|  |  |  | 	"sites": { | 
					
						
							|  |  |  | 		"example.com": { | 
					
						
							|  |  |  | 			"subject": "example.com", | 
					
						
							|  |  |  | 			"altnames": ["example.com", "www.example.com"] | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # Let's Encrypt for...
 | 
					
						
							| 
									
										
										
										
											2018-11-15 00:22:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | - IoT | 
					
						
							|  |  |  | - Enterprise On-Prem | 
					
						
							|  |  |  | - Local Development | 
					
						
							|  |  |  | - Home Servers | 
					
						
							|  |  |  | - Quitting Heroku | 
					
						
							| 
									
										
										
										
											2018-04-23 19:55:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # Features
 | 
					
						
							| 
									
										
										
										
											2018-04-23 20:02:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | - [x] Let's Encrypt v2 (November 2019) | 
					
						
							|  |  |  |   - [x] ACME Protocol (RFC 8555) | 
					
						
							|  |  |  |   - [x] HTTP Validation (HTTP-01) | 
					
						
							|  |  |  |   - [x] DNS Validation (DNS-01) | 
					
						
							|  |  |  |   - [ ] ALPN Validation (TLS-ALPN-01) | 
					
						
							|  |  |  |     - Need ALPN validation? [contact us](mailto:greenlock-support@therootcompany.com) | 
					
						
							|  |  |  | - [x] Automated HTTPS | 
					
						
							|  |  |  |   - [x] Fully Automatic Renewals every 45 days | 
					
						
							|  |  |  |   - [x] Free SSL | 
					
						
							|  |  |  |   - [x] **Wildcard** SSL | 
					
						
							|  |  |  |   - [x] **Localhost** certificates | 
					
						
							|  |  |  |   - [x] HTTPS-enabled Secure **WebSockets** (`wss://`) | 
					
						
							|  |  |  | - [x] Fully customizable | 
					
						
							|  |  |  |   - [x] **Reasonable defaults** | 
					
						
							|  |  |  |   - [x] Domain Management | 
					
						
							|  |  |  |   - [x] Key and Certificate Management | 
					
						
							|  |  |  |   - [x] ACME Challenge Plugins | 
					
						
							| 
									
										
										
										
											2018-04-23 20:02:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # QuickStart Guide
 | 
					
						
							| 
									
										
										
										
											2018-04-23 20:02:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Easy as 1, 2, 3... 4 | 
					
						
							| 
									
										
										
										
											2018-04-23 20:02:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:26:34 -06:00
										 |  |  | <details> | 
					
						
							| 
									
										
										
										
											2019-11-01 04:29:49 -06:00
										 |  |  | <summary>1. Create a node project</summary> | 
					
						
							| 
									
										
										
										
											2019-11-01 04:26:34 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ## 1. Create a node project
 | 
					
						
							| 
									
										
										
										
											2018-04-20 07:14:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Create an empty node project. | 
					
						
							| 
									
										
										
										
											2018-04-20 08:59:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Be sure to fill out the package name, version, and an author email. | 
					
						
							| 
									
										
										
										
											2018-04-20 08:59:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```bash | 
					
						
							|  |  |  | mkdir ~/my-project | 
					
						
							|  |  |  | pushd ~/my-project | 
					
						
							|  |  |  | npm init | 
					
						
							| 
									
										
										
										
											2018-04-20 08:59:33 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:29:49 -06:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | <summary>2. Create an http app (i.e. express)</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ## 2. Create an http app (i.e. express)
 | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 12:57:32 +00:00
										 |  |  | This example is shown with Express, but any node app will do. Greenlock | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | works with everything. | 
					
						
							|  |  |  | (or any node-style http app) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `my-express-app.js`: | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```js | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | // A plain, node-style app | 
					
						
							| 
									
										
										
										
											2016-08-15 21:15:16 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | function myPlainNodeHttpApp(req, res) { | 
					
						
							|  |  |  | 	res.end("Hello, Encrypted World!"); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | // Wrap that plain app in express, | 
					
						
							|  |  |  | // because that's what you're used to | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | var express = require("express"); | 
					
						
							| 
									
										
										
										
											2018-12-22 07:37:16 -07:00
										 |  |  | var app = express(); | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | app.get("/", myPlainNodeHttpApp); | 
					
						
							| 
									
										
										
										
											2018-05-10 00:53:45 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | // export the app normally | 
					
						
							|  |  |  | // do not .listen() | 
					
						
							| 
									
										
										
										
											2018-05-26 01:28:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 07:37:16 -07:00
										 |  |  | module.exports = app; | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:29:49 -06:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | <summary>3. Serve with Greenlock Express</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ## 3. Serve with Greenlock Express
 | 
					
						
							| 
									
										
										
										
											2018-04-20 07:23:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Greenlock Express is designed with these goals in mind: | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | - Simplicity and ease-of-use | 
					
						
							|  |  |  | - Performance and scalability | 
					
						
							|  |  |  | - Configurability and control | 
					
						
							| 
									
										
										
										
											2018-05-19 17:54:08 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | You can start with **near-zero configuration** and | 
					
						
							|  |  |  | slowly add options for greater performance and customization | 
					
						
							|  |  |  | later, if you need them. | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | `server.js`: | 
					
						
							| 
									
										
										
										
											2018-05-19 17:54:08 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:52:38 -06:00
										 |  |  | ```js | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | require("greenlock-express") | 
					
						
							|  |  |  | 	.init(getConfig) | 
					
						
							|  |  |  | 	.serve(worker); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getConfig() { | 
					
						
							|  |  |  | 	return { | 
					
						
							|  |  |  | 		// uses name and version as part of the ACME client user-agent | 
					
						
							| 
									
										
										
										
											2019-10-28 03:52:38 -06:00
										 |  |  | 		// uses author as the contact for support notices | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | 		package: require("./package.json") | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-19 17:54:08 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | function worker(server) { | 
					
						
							|  |  |  | 	// Works with any Node app (Express, etc) | 
					
						
							| 
									
										
										
										
											2019-10-28 03:52:38 -06:00
										 |  |  | 	var app = require("my-express-app.js"); | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | 	server.serveApp(app); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-19 17:54:08 -06:00
										 |  |  | ``` | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | And start your server: | 
					
						
							| 
									
										
										
										
											2018-04-20 08:59:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```bash | 
					
						
							|  |  |  | # Allow non-root node to use ports 80 (HTTP) and 443 (HTTPS)
 | 
					
						
							|  |  |  | sudo setcap 'cap_net_bind_service=+ep' $(which node) | 
					
						
							| 
									
										
										
										
											2018-04-20 08:59:33 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```bash | 
					
						
							|  |  |  | # `npm start` will call `node ./server.js` by default
 | 
					
						
							|  |  |  | npm start | 
					
						
							| 
									
										
										
										
											2018-04-20 08:59:33 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```txt | 
					
						
							|  |  |  | Greenlock v3.0.0 | 
					
						
							|  |  |  | Greenlock Manager Config File: ~/.config/greenlock/manager.json | 
					
						
							|  |  |  | Greenlock Storage Directory: ~/.config/greenlock/ | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Listening on 0.0.0.0:80 for ACME challenges and HTTPS redirects | 
					
						
							|  |  |  | Listening on 0.0.0.0:443 for secure traffic | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-06-03 03:47:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:29:49 -06:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | <summary>4. Manage SSL Certificates and Domains</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ## 4. Manage domains
 | 
					
						
							| 
									
										
										
										
											2018-08-17 19:58:50 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | The management API is built to work with Databases, S3, etc. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | HOWEVER, by default it starts with a simple config file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <!--
 | 
					
						
							|  |  |  | This will update the config file (assuming the default fs-based management plugin): | 
					
						
							|  |  |  | --> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `~/.config/greenlock/manager.json`: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```json | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	"subscriberEmail": "letsencrypt-test@therootcompany.com", | 
					
						
							|  |  |  | 	"agreeToTerms": true, | 
					
						
							|  |  |  | 	"sites": { | 
					
						
							|  |  |  | 		"example.com": { | 
					
						
							|  |  |  | 			"subject": "example.com", | 
					
						
							|  |  |  | 			"altnames": ["example.com", "www.example.com"] | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | COMING SOON | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Management can be done via the **CLI** or the JavaScript [**API**](https://git.rootprojects.org/root/greenlock.js/). | 
					
						
							|  |  |  | Since this is the QuickStart, we'll demo the **CLI**: | 
					
						
							| 
									
										
										
										
											2016-08-12 03:02:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | You need to create a Let's Encrypt _subscriber account_, which can be done globally, or per-site. | 
					
						
							|  |  |  | All individuals, and most businesses, should set this globally: | 
					
						
							| 
									
										
										
										
											2018-08-17 20:43:32 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | # COMING SOON
 | 
					
						
							|  |  |  | # (this command should be here by Nov 5th)
 | 
					
						
							|  |  |  | # (edit the config by hand for now)
 | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # Set a global subscriber account
 | 
					
						
							|  |  |  | npx greenlock config --subscriber-email 'mycompany@example.com' --agree-to-terms true | 
					
						
							| 
									
										
										
										
											2018-08-17 20:43:32 -06:00
										 |  |  | ``` | 
					
						
							| 
									
										
										
										
											2018-04-20 07:09:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | <!-- todo print where the key was saved --> | 
					
						
							| 
									
										
										
										
											2018-12-22 07:37:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | A Let's Encrypt SSL certificate has a "Subject" (Primary Domain) and up to 100 "Alternative Names" | 
					
						
							|  |  |  | (of which the first _must_ be the subject). | 
					
						
							| 
									
										
										
										
											2016-08-17 09:11:10 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  | # COMING SOON
 | 
					
						
							|  |  |  | # (this command should be here by Nov 5th)
 | 
					
						
							|  |  |  | # (edit the config by hand for now)
 | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # Add a certificate with specific domains
 | 
					
						
							|  |  |  | npx greenlock add --subject example.com --altnames example.com,www.example.com | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2016-08-17 09:11:10 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | <!-- todo print where the cert was saved --> | 
					
						
							| 
									
										
										
										
											2018-05-11 20:29:21 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Note: **Localhost**, **Wildcard**, and Certificates for Private Networks require | 
					
						
							|  |  |  | [**DNS validation**](https://git.rootprojects.org/root/greenlock-exp). | 
					
						
							| 
									
										
										
										
											2016-08-17 09:25:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | - DNS Validation | 
					
						
							| 
									
										
										
										
											2019-11-01 04:12:40 -06:00
										 |  |  |   - [**Wildcards**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/wildcards/) (coming soon) | 
					
						
							|  |  |  |   - [**Localhost**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/localhost/) (coming soon) | 
					
						
							|  |  |  |   - [**CI/CD**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/ci-cd/) (coming soon) | 
					
						
							| 
									
										
										
										
											2016-08-17 09:25:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 04:26:34 -06:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Plenty of Examples
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **These are in-progress** Check back tomorrow (Nov 2nd, 2019). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - [greenlock-express.js/examples/](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples) | 
					
						
							|  |  |  |   - [Express](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/express/) | 
					
						
							|  |  |  |   - [Node's **http2**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http2/) | 
					
						
							|  |  |  |   - [Node's https](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/https/) | 
					
						
							|  |  |  |   - [**WebSockets**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/websockets/) | 
					
						
							|  |  |  |   - [Socket.IO](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/socket-io/) | 
					
						
							|  |  |  |   - [Cluster](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/cluster/) | 
					
						
							|  |  |  |   - [**Wildcards**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/wildcards/) (coming soon) | 
					
						
							|  |  |  |   - [**Localhost**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/localhost/) (coming soon) | 
					
						
							|  |  |  |   - [**CI/CD**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/ci-cd/) (coming soon) | 
					
						
							|  |  |  |   - [HTTP Proxy](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http-proxy/) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Easy to Customize
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <!-- greenlock-manager-test => greenlock-manager-custom --> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <!--
 | 
					
						
							|  |  |  | - [greenlock.js/examples/](https://git.rootprojects.org/root/greenlock.js/src/branch/master/examples) | 
					
						
							|  |  |  | --> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - [Custom Domain Management](https://git.rootprojects.org/root/greenlock-manager-test.js) | 
					
						
							|  |  |  | - [Custom Key & Cert Storage](https://git.rootprojects.org/root/greenlock-store-test.js) | 
					
						
							|  |  |  | - [Custom ACME HTTP-01 Challenges](https://git.rootprojects.org/root/acme-http-01-test.js) | 
					
						
							|  |  |  | - [Custom ACME DNS-01 Challenges](https://git.rootprojects.org/root/acme-dns-01-test.js) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Ready-made Integrations
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Greenlock Express integrates between Let's Encrypt's ACME Challenges and many popular services. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Type        | Service                                                                             | Plugin                   | | 
					
						
							|  |  |  | | ----------- | ----------------------------------------------------------------------------------- | ------------------------ | | 
					
						
							|  |  |  | | dns-01      | CloudFlare                                                                          | acme-dns-01-cloudflare   | | 
					
						
							|  |  |  | | dns-01      | [Digital Ocean](https://git.rootprojects.org/root/acme-dns-01-digitalocean.js)      | acme-dns-01-digitalocean | | 
					
						
							|  |  |  | | dns-01      | [DNSimple](https://git.rootprojects.org/root/acme-dns-01-dnsimple.js)               | acme-dns-01-dnsimple     | | 
					
						
							|  |  |  | | dns-01      | [DuckDNS](https://git.rootprojects.org/root/acme-dns-01-duckdns.js)                 | acme-dns-01-duckdns      | | 
					
						
							|  |  |  | | http-01     | File System / [Web Root](https://git.rootprojects.org/root/acme-http-01-webroot.js) | acme-http-01-webroot     | | 
					
						
							|  |  |  | | dns-01      | [GoDaddy](https://git.rootprojects.org/root/acme-dns-01-godaddy.js)                 | acme-dns-01-godaddy      | | 
					
						
							|  |  |  | | dns-01      | [Gandi](https://git.rootprojects.org/root/acme-dns-01-gandi.js)                     | acme-dns-01-gandi        | | 
					
						
							|  |  |  | | dns-01      | [NameCheap](https://git.rootprojects.org/root/acme-dns-01-namecheap.js)             | acme-dns-01-namecheap    | | 
					
						
							|  |  |  | | dns-01      | [Name.com](https://git.rootprojects.org/root/acme-dns-01-namedotcom.js)         | acme-dns-01-namedotcom   | | 
					
						
							|  |  |  | | dns-01      | Route53 (AWS)                                                                       | acme-dns-01-route53      | | 
					
						
							|  |  |  | | http-01     | S3 (AWS, Digital Ocean, Scaleway)                                                   | acme-http-01-s3          | | 
					
						
							|  |  |  | | dns-01      | [Vultr](https://git.rootprojects.org/root/acme-dns-01-vultr.js)                     | acme-dns-01-vultr        | | 
					
						
							|  |  |  | | dns-01      | [Build your own](https://git.rootprojects.org/root/acme-dns-01-test.js)             | acme-dns-01-test         | | 
					
						
							|  |  |  | | http-01     | [Build your own](https://git.rootprojects.org/root/acme-http-01-test.js)            | acme-http-01-test        | | 
					
						
							|  |  |  | | tls-alpn-01 | [Contact us](mailto:support@therootcompany.com)                                     | -                        | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Search `acme-http-01-` or `acme-dns-01-` on npm to find more. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # Full Documentation
 | 
					
						
							| 
									
										
										
										
											2016-08-12 03:56:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | <!--
 | 
					
						
							|  |  |  | - Greenlock CLI | 
					
						
							|  |  |  | - Greenlock JavaScript API | 
					
						
							|  |  |  | --> | 
					
						
							| 
									
										
										
										
											2016-08-15 21:15:16 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Most of the documentation is done by use-case examples, as shown up at the top of the README. | 
					
						
							| 
									
										
										
										
											2016-08-15 19:12:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | We're working on more comprehensive documentation for this newly released version. | 
					
						
							|  |  |  | **Please open an issue** with questions in the meantime. | 
					
						
							| 
									
										
										
										
											2016-08-15 19:12:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | # Commercial Support
 | 
					
						
							| 
									
										
										
										
											2016-08-12 03:56:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | Do you need... | 
					
						
							| 
									
										
										
										
											2016-08-12 03:56:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | - training? | 
					
						
							|  |  |  | - specific features? | 
					
						
							|  |  |  | - different integrations? | 
					
						
							|  |  |  | - bugfixes, on _your_ timeline? | 
					
						
							|  |  |  | - custom code, built by experts? | 
					
						
							|  |  |  | - commercial support and licensing? | 
					
						
							| 
									
										
										
										
											2018-05-03 00:55:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | You're welcome to [contact us](mailto:aj@therootcompany.com) in regards to IoT, On-Prem, | 
					
						
							|  |  |  | Enterprise, and Internal installations, integrations, and deployments. | 
					
						
							| 
									
										
										
										
											2018-05-03 00:55:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | We have both commercial support and commercial licensing available. | 
					
						
							| 
									
										
										
										
											2018-05-31 21:14:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 03:43:53 -06:00
										 |  |  | We also offer consulting for all-things-ACME and Let's Encrypt. | 
					
						
							| 
									
										
										
										
											2018-11-15 00:22:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-15 22:19:58 -06:00
										 |  |  | # Legal & Rules of the Road
 | 
					
						
							| 
									
										
										
										
											2018-12-17 01:04:39 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-15 22:19:58 -06:00
										 |  |  | Greenlock™ is a [trademark](https://rootprojects.org/legal/#trademark) of AJ ONeal | 
					
						
							| 
									
										
										
										
											2018-11-15 00:22:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-15 22:19:58 -06:00
										 |  |  | The rule of thumb is "attribute, but don't confuse". For example: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-15 22:39:35 -06:00
										 |  |  | > Built with [Greenlock Express](https://git.rootprojects.org/root/greenlock.js) (a [Root](https://rootprojects.org) project).
 | 
					
						
							| 
									
										
										
										
											2019-05-15 22:19:58 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Please [contact us](mailto:aj@therootcompany.com) if you have any questions in regards to our trademark, | 
					
						
							|  |  |  | attribution, and/or visible source policies. We want to build great software and a great community. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [Greenlock™](https://git.rootprojects.org/root/greenlock.js) | | 
					
						
							| 
									
										
										
										
											2018-12-17 01:04:39 -07:00
										 |  |  | MPL-2.0 | | 
					
						
							|  |  |  | [Terms of Use](https://therootcompany.com/legal/#terms) | | 
					
						
							|  |  |  | [Privacy Policy](https://therootcompany.com/legal/#privacy) |