This commit is contained in:
AJ ONeal 2019-11-01 15:19:15 -06:00
parent d5c6d5b745
commit f3966859f9
3 changed files with 165 additions and 163 deletions

182
README.md
View File

@ -22,26 +22,26 @@ Greenlock Express is a **Web Server** with **Fully Automated HTTPS** and renewal
"use strict"; "use strict";
function httpsWorker(glx) { function httpsWorker(glx) {
// Serves on 80 and 443 // Serves on 80 and 443
// Get's SSL certificates magically! // Get's SSL certificates magically!
glx.serveApp(function(req, res) { glx.serveApp(function(req, res) {
res.end("Hello, Encrypted World!"); res.end("Hello, Encrypted World!");
}); });
} }
var pkg = require("./package.json"); var pkg = require("./package.json");
require("greenlock-express") require("greenlock-express")
.init(function getConfig() { .init(function getConfig() {
// Greenlock Config // Greenlock Config
return { return {
package: { name: pkg.name, version: pkg.version }, package: { name: pkg.name, version: pkg.version },
maintainerEmail: pkg.author, maintainerEmail: pkg.author,
cluster: false cluster: false
}; };
}) })
.serve(httpsWorker); .serve(httpsWorker);
``` ```
Manage via API or the config file: Manage via API or the config file:
@ -50,44 +50,44 @@ Manage via API or the config file:
```json ```json
{ {
"subscriberEmail": "letsencrypt-test@therootcompany.com", "subscriberEmail": "letsencrypt-test@therootcompany.com",
"agreeToTerms": true, "agreeToTerms": true,
"sites": { "sites": {
"example.com": { "example.com": {
"subject": "example.com", "subject": "example.com",
"altnames": ["example.com", "www.example.com"] "altnames": ["example.com", "www.example.com"]
} }
} }
} }
``` ```
# Let's Encrypt for... # Let's Encrypt for...
- IoT - IoT
- Enterprise On-Prem - Enterprise On-Prem
- Local Development - Local Development
- Home Servers - Home Servers
- Quitting Heroku - Quitting Heroku
# Features # Features
- [x] Let's Encrypt v2 (November 2019) - [x] Let's Encrypt v2 (November 2019)
- [x] ACME Protocol (RFC 8555) - [x] ACME Protocol (RFC 8555)
- [x] HTTP Validation (HTTP-01) - [x] HTTP Validation (HTTP-01)
- [x] DNS Validation (DNS-01) - [x] DNS Validation (DNS-01)
- [ ] ALPN Validation (TLS-ALPN-01) - [ ] ALPN Validation (TLS-ALPN-01)
- Need ALPN validation? [contact us](mailto:greenlock-support@therootcompany.com) - Need ALPN validation? [contact us](mailto:greenlock-support@therootcompany.com)
- [x] Automated HTTPS - [x] Automated HTTPS
- [x] Fully Automatic Renewals every 45 days - [x] Fully Automatic Renewals every 45 days
- [x] Free SSL - [x] Free SSL
- [x] **Wildcard** SSL - [x] **Wildcard** SSL
- [x] **Localhost** certificates - [x] **Localhost** certificates
- [x] HTTPS-enabled Secure **WebSockets** (`wss://`) - [x] HTTPS-enabled Secure **WebSockets** (`wss://`)
- [x] Fully customizable - [x] Fully customizable
- [x] **Reasonable defaults** - [x] **Reasonable defaults**
- [x] Domain Management - [x] Domain Management
- [x] Key and Certificate Management - [x] Key and Certificate Management
- [x] ACME Challenge Plugins - [x] ACME Challenge Plugins
# QuickStart Guide # QuickStart Guide
@ -127,7 +127,7 @@ works with everything.
// A plain, node-style app // A plain, node-style app
function myPlainNodeHttpApp(req, res) { function myPlainNodeHttpApp(req, res) {
res.end("Hello, Encrypted World!"); res.end("Hello, Encrypted World!");
} }
// Wrap that plain app in express, // Wrap that plain app in express,
@ -152,9 +152,9 @@ module.exports = app;
Greenlock Express is designed with these goals in mind: Greenlock Express is designed with these goals in mind:
- Simplicity and ease-of-use - Simplicity and ease-of-use
- Performance and scalability - Performance and scalability
- Configurability and control - Configurability and control
You can start with **near-zero configuration** and You can start with **near-zero configuration** and
slowly add options for greater performance and customization slowly add options for greater performance and customization
@ -164,21 +164,21 @@ later, if you need them.
```js ```js
require("greenlock-express") require("greenlock-express")
.init(getConfig) .init(getConfig)
.serve(worker); .serve(worker);
function getConfig() { function getConfig() {
return { return {
// uses name and version as part of the ACME client user-agent // uses name and version as part of the ACME client user-agent
// uses author as the contact for support notices // uses author as the contact for support notices
package: require("./package.json") package: require("./package.json")
}; };
} }
function worker(server) { function worker(server) {
// Works with any Node app (Express, etc) // Works with any Node app (Express, etc)
var app = require("my-express-app.js"); var app = require("my-express-app.js");
server.serveApp(app); server.serveApp(app);
} }
``` ```
@ -222,14 +222,14 @@ This will update the config file (assuming the default fs-based management plugi
```json ```json
{ {
"subscriberEmail": "letsencrypt-test@therootcompany.com", "subscriberEmail": "letsencrypt-test@therootcompany.com",
"agreeToTerms": true, "agreeToTerms": true,
"sites": { "sites": {
"example.com": { "example.com": {
"subject": "example.com", "subject": "example.com",
"altnames": ["example.com", "www.example.com"] "altnames": ["example.com", "www.example.com"]
} }
} }
} }
``` ```
@ -269,10 +269,10 @@ npx greenlock add --subject example.com --altnames example.com,www.example.com
Note: **Localhost**, **Wildcard**, and Certificates for Private Networks require Note: **Localhost**, **Wildcard**, and Certificates for Private Networks require
[**DNS validation**](https://git.rootprojects.org/root/greenlock-exp). [**DNS validation**](https://git.rootprojects.org/root/greenlock-exp).
- DNS Validation - DNS Validation
- [**Wildcards**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/wildcards/) (coming soon) - [**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) - [**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) - [**CI/CD**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/ci-cd/) (coming soon)
</details> </details>
@ -280,17 +280,17 @@ Note: **Localhost**, **Wildcard**, and Certificates for Private Networks require
**These are in-progress** Check back tomorrow (Nov 2nd, 2019). **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) - [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/) - [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 **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/) - [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/) - [**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/) - [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/) - [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) - [**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) - [**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) - [**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/) - [HTTP Proxy](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http-proxy/)
# Easy to Customize # Easy to Customize
@ -300,10 +300,10 @@ Note: **Localhost**, **Wildcard**, and Certificates for Private Networks require
- [greenlock.js/examples/](https://git.rootprojects.org/root/greenlock.js/src/branch/master/examples) - [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 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 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 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) - [Custom ACME DNS-01 Challenges](https://git.rootprojects.org/root/acme-dns-01-test.js)
# Ready-made Integrations # Ready-made Integrations
@ -345,12 +345,12 @@ We're working on more comprehensive documentation for this newly released versio
Do you need... Do you need...
- training? - training?
- specific features? - specific features?
- different integrations? - different integrations?
- bugfixes, on _your_ timeline? - bugfixes, on _your_ timeline?
- custom code, built by experts? - custom code, built by experts?
- commercial support and licensing? - commercial support and licensing?
You're welcome to [contact us](mailto:aj@therootcompany.com) in regards to IoT, On-Prem, You're welcome to [contact us](mailto:aj@therootcompany.com) in regards to IoT, On-Prem,
Enterprise, and Internal installations, integrations, and deployments. Enterprise, and Internal installations, integrations, and deployments.

46
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "greenlock-express", "name": "greenlock-express",
"version": "3.0.11", "version": "3.0.13",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -39,30 +39,32 @@
"resolved": "https://registry.npmjs.org/@root/encoding/-/encoding-1.0.1.tgz", "resolved": "https://registry.npmjs.org/@root/encoding/-/encoding-1.0.1.tgz",
"integrity": "sha512-OaEub02ufoU038gy6bsNHQOjIn8nUjGiLcaRmJ40IUykneJkIW5fxDqKxQx48cszuNflYldsJLPPXCrGfHs8yQ==" "integrity": "sha512-OaEub02ufoU038gy6bsNHQOjIn8nUjGiLcaRmJ40IUykneJkIW5fxDqKxQx48cszuNflYldsJLPPXCrGfHs8yQ=="
}, },
"@root/greenlock": {
"version": "3.0.24",
"resolved": "https://registry.npmjs.org/@root/greenlock/-/greenlock-3.0.24.tgz",
"integrity": "sha512-uJgHIdWEzZ1QeFN+Ydc2vKs91RDlZQTUF2R2WcklayWivXvBnr7QiyLDVtI5VZuJN6y5RQeWXmDQub/On+8wbg==",
"requires": {
"@root/acme": "^3.0.8",
"@root/csr": "^0.8.1",
"@root/keypairs": "^0.9.0",
"@root/mkdirp": "^1.0.0",
"@root/request": "^1.3.10",
"acme-http-01-standalone": "^3.0.5",
"cert-info": "^1.5.1",
"greenlock-manager-fs": "^3.0.1",
"greenlock-store-fs": "^3.2.0",
"safe-replace": "^1.1.0"
}
},
"@root/greenlock-express": { "@root/greenlock-express": {
"version": "3.0.11", "version": "3.0.13",
"resolved": "https://registry.npmjs.org/@root/greenlock-express/-/greenlock-express-3.0.11.tgz", "resolved": "https://registry.npmjs.org/@root/greenlock-express/-/greenlock-express-3.0.13.tgz",
"integrity": "sha512-lmDJFxJQjYOHRtQy7tkthKmXxRAVily/N0C3fGRe30XmCOlRHJz6FG4BjQ8VGWCJ6sMZ2zKxa9JDmo8Ov10Vow==", "integrity": "sha512-SgFsP4rBDPRBp52yqb8kONw7ZCkgyYrBFJLg4xhfIMbsMct4dfqB+N5eJbeF/exJh4+BHM7tppvf31Xuz6EO2Q==",
"requires": { "requires": {
"@root/greenlock": "^3.0.17", "@root/greenlock": "^3.0.25",
"redirect-https": "^1.1.5" "redirect-https": "^1.1.5"
},
"dependencies": {
"@root/greenlock": {
"version": "3.0.25",
"resolved": "https://registry.npmjs.org/@root/greenlock/-/greenlock-3.0.25.tgz",
"integrity": "sha512-VC8H9MTkbqxlB2LGntmcq5cstkE0TdZLvxm25SO5i7c6abJBVMQafhTD415OXwoGimnmWTn6SZ93Fj73d9QX/w==",
"requires": {
"@root/acme": "^3.0.8",
"@root/csr": "^0.8.1",
"@root/keypairs": "^0.9.0",
"@root/mkdirp": "^1.0.0",
"@root/request": "^1.3.10",
"acme-http-01-standalone": "^3.0.5",
"cert-info": "^1.5.1",
"greenlock-manager-fs": "^3.0.1",
"greenlock-store-fs": "^3.2.0",
"safe-replace": "^1.1.0"
}
}
} }
}, },
"@root/keypairs": { "@root/keypairs": {

View File

@ -1,52 +1,52 @@
{ {
"name": "greenlock-express", "name": "greenlock-express",
"version": "3.0.11", "version": "3.0.13",
"description": "Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, Hapi, and all other middleware systems.", "description": "Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, Hapi, and all other middleware systems.",
"main": "greenlock-express.js", "main": "greenlock-express.js",
"homepage": "https://greenlock.domains", "homepage": "https://greenlock.domains",
"files": [ "files": [
"*.js", "*.js",
"lib", "lib",
"scripts" "scripts"
], ],
"scripts": { "scripts": {
"start": "node_todo server.js ./config.js", "start": "node_todo server.js ./config.js",
"test": "node_todo test/greenlock.js" "test": "node_todo test/greenlock.js"
}, },
"directories": { "directories": {
"example": "examples" "example": "examples"
}, },
"dependencies": { "dependencies": {
"@root/greenlock": "^3.0.17", "@root/greenlock": "^3.0.25",
"@root/greenlock-express": "^3.0.11", "@root/greenlock-express": "^3.0.13",
"redirect-https": "^1.1.5" "redirect-https": "^1.1.5"
}, },
"trulyOptionalDependencies": { "trulyOptionalDependencies": {
"http-proxy": "^1.17.0", "http-proxy": "^1.17.0",
"express": "^4.16.3", "express": "^4.16.3",
"express-basic-auth": "^1.2.0", "express-basic-auth": "^1.2.0",
"finalhandler": "^1.1.1", "finalhandler": "^1.1.1",
"serve-index": "^1.9.1", "serve-index": "^1.9.1",
"serve-static": "^1.13.2", "serve-static": "^1.13.2",
"ws": "^5.2.1" "ws": "^5.2.1"
}, },
"devDependencies": {}, "devDependencies": {},
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://git.rootprojects.org/root/greenlock-express.js.git" "url": "https://git.rootprojects.org/root/greenlock-express.js.git"
}, },
"keywords": [ "keywords": [
"Let's Encrypt", "Let's Encrypt",
"ACME", "ACME",
"greenlock", "greenlock",
"Free SSL", "Free SSL",
"Automated HTTPS", "Automated HTTPS",
"https", "https",
"tls" "tls"
], ],
"author": "AJ ONeal <coolaj86@gmail.com> (https://solderjs.com/)", "author": "AJ ONeal <coolaj86@gmail.com> (https://solderjs.com/)",
"license": "MPL-2.0", "license": "MPL-2.0",
"bugs": { "bugs": {
"url": "https://git.rootprojects.org/root/greenlock-express.js/issues" "url": "https://git.rootprojects.org/root/greenlock-express.js/issues"
} }
} }