Compare commits
	
		
			No commits in common. "8cf13b329a383237ac73a3eff8e7e175a432f14d" and "4e447ec9cde6905137fca35aaba92c7a5c225f83" have entirely different histories.
		
	
	
		
			8cf13b329a
			...
			4e447ec9cd
		
	
		
							
								
								
									
										305
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										305
									
								
								README.md
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | |||||||
|  |  | ||||||
| 
 | 
 | ||||||
| # Greenlock™ Certificate Manager for Web Servers | # Greenlock™ for Web Servers | ||||||
| 
 | 
 | ||||||
| A server-friendly commandline tool for Free SSL, Free Wildcard SSL, and Fully Automated HTTPS | A server-friendly commandline tool for Free SSL, Free Wildcard SSL, and Fully Automated HTTPS | ||||||
| <small>certificates issued by Let's Encrypt v2 via ACME</small> | <small>certificates issued by Let's Encrypt v2 via ACME</small> | ||||||
| @ -10,59 +10,6 @@ Greenlock is also available | |||||||
| [for node.js](https://git.coolaj86.com/coolaj86/greenlock-express.js), | [for node.js](https://git.coolaj86.com/coolaj86/greenlock-express.js), | ||||||
| and [for API integrations](https://git.coolaj86.com/coolaj86/greenlock.js) | and [for API integrations](https://git.coolaj86.com/coolaj86/greenlock.js) | ||||||
| 
 | 
 | ||||||
| Why use Greenlock? Two Reasons: |  | ||||||
| =============================== |  | ||||||
| 
 |  | ||||||
| One |  | ||||||
| --- |  | ||||||
| 
 |  | ||||||
| You want to be able to run a command like this: |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| sudo greenlock --domains example.com --config /etc/greenlock/greenlock.yml |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| And then get awesome results like this: |  | ||||||
| 
 |  | ||||||
| ``` |  | ||||||
| /etc/ssl/acme |  | ||||||
| ├── accounts |  | ||||||
| │   └── acme-staging-v02.api.letsencrypt.org/directory |  | ||||||
| │       └── c07a31a70c691d64f6b4d31f51a6dd9c |  | ||||||
| │           ├── meta.json |  | ||||||
| │           ├── private_key.json |  | ||||||
| │           └── regr.json |  | ||||||
| └── live |  | ||||||
|     └── example.com               <-- Free SSL like magic! Wow! |  | ||||||
|         ├── bundle.pem |  | ||||||
|         ├── cert.pem |  | ||||||
|         ├── chain.pem |  | ||||||
|         ├── fullchain.pem |  | ||||||
|         └── privkey.pem |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| That you use with your existing webserver - Apache, Nginx, HAProxy, node.js, etc |  | ||||||
| 
 |  | ||||||
| And install to renew so that you never worry about ssl again. |  | ||||||
| 
 |  | ||||||
| Two |  | ||||||
| --- |  | ||||||
| 
 |  | ||||||
| You want to be able to run a command like this: |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| sudo greenlock --install systemd --config /etc/greenlock.yml --webroot '/srv/www/:hostname' |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| To immediately secure and publish any and all sites you have in a web root like this: |  | ||||||
| 
 |  | ||||||
| ``` |  | ||||||
| /srv/www/ |  | ||||||
| ├── coolsite.rocks |  | ||||||
| ├── example.com |  | ||||||
| └── whatever.app |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Features | Features | ||||||
| ======== | ======== | ||||||
| 
 | 
 | ||||||
| @ -81,15 +28,54 @@ Features | |||||||
|     - [x] HTTP Challenge Plugins - AWS S3, Azure, Consul, etcd |     - [x] HTTP Challenge Plugins - AWS S3, Azure, Consul, etcd | ||||||
|     - [x] DNS Challenge Plugins - AWS Route53, CloudFlare, Digital Ocean |     - [x] DNS Challenge Plugins - AWS Route53, CloudFlare, Digital Ocean | ||||||
|     - [x] Account & Certificate Storage Plugins - AWS S3, Redis |     - [x] Account & Certificate Storage Plugins - AWS S3, Redis | ||||||
|   - [x] Built-in WebServer | 
 | ||||||
|  | Demo | ||||||
|  | ==== | ||||||
|  | 
 | ||||||
|  | Run as a webserver: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | sudo greenlock --daemon \ | ||||||
|  |   --email jon@example.com \ | ||||||
|  |   --agree-tos \ | ||||||
|  |   --root /srv/www/example.com \ | ||||||
|  |   --domains example.com,www.example.com | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Fetch certificates for Apache, Nginx, or HAProxy: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | greenlock --email jon@example.com \ | ||||||
|  |   --agree-tos \ | ||||||
|  |   --domains example.com,www.example.com \ | ||||||
|  |   --webroot-path /srv/www/example.com \ | ||||||
|  |   --privkey-path /etc/ssl/privkey.pem \ | ||||||
|  |   --fullchain-path /etc/ssl/fullchain.pem \ | ||||||
|  |   --bundle-path /etc/ssl/bundle.pem | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Robust configurations for Greenlock as a system service | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | sudo greenlock --install systemd --config /etc/greenlock/greenlock.yml | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | See explanations below in the **Usage** section. | ||||||
| 
 | 
 | ||||||
| Install | Install | ||||||
| ======= | ======= | ||||||
| 
 | 
 | ||||||
|  | Windows | ||||||
|  | ------- | ||||||
|  | 
 | ||||||
|  | 1. Install node.js | ||||||
|  | 2. Open `Node.js cmd.exe` | ||||||
|  | 2. Run the command `npm install -g greenlock-cli` | ||||||
|  | 
 | ||||||
| Mac | Mac | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| Open Terminal and run this install script: | Open Terminal | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| curl -fsS https://get.greenlock.app/ | bash | curl -fsS https://get.greenlock.app/ | bash | ||||||
| @ -98,111 +84,10 @@ curl -fsS https://get.greenlock.app/ | bash | |||||||
| Linux | Linux | ||||||
| ----- | ----- | ||||||
| 
 | 
 | ||||||
| Open Terminal and run this install script: |  | ||||||
| 
 |  | ||||||
| ```bash | ```bash | ||||||
| curl -fsS https://get.greenlock.app/ | bash | curl -fsS https://get.greenlock.app/ | bash | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| Windows & Node.js |  | ||||||
| ----------------- |  | ||||||
| 
 |  | ||||||
| 1. Install [node.js](https://nodejs.org) |  | ||||||
| 2. Open _Node.js_ |  | ||||||
| 2. Run the command `npm install -g greenlock-cli` |  | ||||||
| 
 |  | ||||||
| Important: How to Not Get Blocked |  | ||||||
| =================== |  | ||||||
| 
 |  | ||||||
| PLEASE READ ALL THREE SENTENCES: |  | ||||||
| 
 |  | ||||||
|   * These examples use the PRODUCTION ENVIRONMENT (where you can be blocked) |  | ||||||
|   * If an example DOESN'T WORK on the first try, STOP! |  | ||||||
|   * UNCOMMENT the `--staging` flag and see the TROUBLESHOOTING SECTION |  | ||||||
| 
 |  | ||||||
| Quick Examples |  | ||||||
| ============== |  | ||||||
| 
 |  | ||||||
| The most basic options are exposed as commandline flags, |  | ||||||
| just so that we can do little domes like this. |  | ||||||
| 
 |  | ||||||
| The config file is explained after the troubleshooting section. |  | ||||||
| 
 |  | ||||||
| ### The Greenlock HTTPS WebServer |  | ||||||
| 
 |  | ||||||
| Easy to run on your server, nothing else required: |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| sudo greenlock --webserver \ |  | ||||||
|   --agree-tos --email jon@example.com \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --webroot /srv/www/example.com \ |  | ||||||
|   --config-dir ~/acme/etc #--staging |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Add SSL to an Existing WebServer |  | ||||||
| 
 |  | ||||||
| For all the Apache, Nginx, and HAProxy fans out there: |  | ||||||
| 
 |  | ||||||
| (use your existing webroot) |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| sudo greenlock --agree-tos --email jon@example.com \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --webroot /srv/www/example.com \ |  | ||||||
|   --privkey-path /etc/ssl/example.com/privkey.pem \ |  | ||||||
|   --fullchain-path /etc/ssl/example.com/fullchain.pem \ |  | ||||||
|   --bundle-path /etc/ssl/example.com/bundle.pem \ |  | ||||||
|   --config-dir /etc/ssl/acme #--staging |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Get SSL Certificates Interactively |  | ||||||
| 
 |  | ||||||
| Run this manual process on your laptop and copy the certificates |  | ||||||
| to you server afterwards: |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| greenlock --agree-tos --email jon@example.com \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --privkey-path /etc/ssl/example.com/privkey.pem \ |  | ||||||
|   --fullchain-path /etc/ssl/example.com/fullchain.pem \ |  | ||||||
|   --bundle-path /etc/ssl/example.com/bundle.pem \ |  | ||||||
|   --manual \ |  | ||||||
|   --config-dir /etc/ssl/acme #--staging |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Standalone SSL Certificate Retrieval |  | ||||||
| 
 |  | ||||||
| Run this on a server standalone just to retrieve |  | ||||||
| certificates: |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| sudo greenlock --agree-tos --email jon@example.com \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --privkey-path /etc/ssl/example.com/privkey.pem \ |  | ||||||
|   --fullchain-path /etc/ssl/example.com/fullchain.pem \ |  | ||||||
|   --bundle-path /etc/ssl/example.com/bundle.pem \ |  | ||||||
|   --standalone \ |  | ||||||
|   --config-dir ~/etc/ssl/acme #--staging |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Troubleshooting |  | ||||||
| =============== |  | ||||||
| 
 |  | ||||||
| Watch the [Troubleshooting Screencast](https://youtu.be/e8vaR4CEZ5s?t=397) |  | ||||||
| 
 |  | ||||||
| **Note**: Replace `whatever.com` with your domain, use your real email, etc. |  | ||||||
| 
 |  | ||||||
| 0. Use the `--staging` flag while troubleshooting |  | ||||||
| 1. Do you have a valid A record for `whatever.com`? |  | ||||||
| 2. When you `ping whatever.com` do you see that same address? |  | ||||||
| 3. Can you confirm that's your server's address with `ifconfig` or `ipconfig`? |  | ||||||
| 4. Do you have write access to all of the directories you've specified? |  | ||||||
| 
 |  | ||||||
| **Important**: Don't forget to delete the directory specified in `--config-dir` |  | ||||||
| when you get things figured out and remove `--staging`. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Usage | Usage | ||||||
| ===== | ===== | ||||||
| 
 | 
 | ||||||
| @ -253,7 +138,7 @@ This option is great for testing, but since it requires the use of | |||||||
| the same ports that your webserver needs, it isn't a good choice | the same ports that your webserver needs, it isn't a good choice | ||||||
| for production. | for production. | ||||||
| 
 | 
 | ||||||
| ### WebRoot | ### WebRoot (production option 1) | ||||||
| 
 | 
 | ||||||
| You can specify the path to where you keep your `index.html` with `webroot`, as | You can specify the path to where you keep your `index.html` with `webroot`, as | ||||||
| long as your server is serving plain HTTP on port 80. | long as your server is serving plain HTTP on port 80. | ||||||
| @ -283,6 +168,71 @@ ls /etc/letsencrypt/live/ | |||||||
| You can use a cron job to run the script above every 80 days (the certificates expire after 90 days) | You can use a cron job to run the script above every 80 days (the certificates expire after 90 days) | ||||||
| so that you always have fresh certificates. | so that you always have fresh certificates. | ||||||
| 
 | 
 | ||||||
|  | ### Hooks (production option 2) | ||||||
|  | 
 | ||||||
|  | You can also integrate with a secure server. This is more complicated than the | ||||||
|  | webroot option, but it allows you to obtain certificates with only port 443 | ||||||
|  | open. This facility can work with any web server as long as it supports server | ||||||
|  | name indication (SNI) and you can provide a configuration file template and | ||||||
|  | shell hooks to install and uninstall the configuration (without downtime). In | ||||||
|  | fact, it doesn't even need to be a webserver (though it must run on port 443); | ||||||
|  | it could be another server that performs SSL/TLS negotiation with SNI. | ||||||
|  | 
 | ||||||
|  | The process works something like this. You would run: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | sudo greenlock certonly \ | ||||||
|  |   --agree-tos --email john.doe@example.com \ | ||||||
|  |   --hooks --hooks-server apache2-debian \ | ||||||
|  |   --config-dir /etc/acme \ | ||||||
|  |   --domains example.com,www.example.com \ | ||||||
|  |   --server https://acme-staging-v02.api.letsencrypt.org/directory | ||||||
|  |   --acme-version draft-11 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Three files are then generated: | ||||||
|  | 
 | ||||||
|  | * a configuration fragment: `some-long-string.conf` | ||||||
|  | * a challenge-fulfilling certificate: `the-same-long-string.crt` | ||||||
|  | * a private key: `the-same-long-string.key` | ||||||
|  | 
 | ||||||
|  | A hook is then run to enable the fragment, e.g. by linking it (it should not be | ||||||
|  | moved) into a `conf.d` directory (for Apache on Debian, `sites-enabled`). A | ||||||
|  | second hook is then run to check the configuration is valid, to avoid | ||||||
|  | accidental downtime, and then another to signal to the server to reload the | ||||||
|  | configuration. The server will now serve the generated certificate on a special | ||||||
|  | domain to prove you own the domain you're getting a certificate for. | ||||||
|  | 
 | ||||||
|  | After the domain has been validated externally, hooks are run to disable the | ||||||
|  | configuration fragment, and again check and reload the configuration. | ||||||
|  | 
 | ||||||
|  | You can then find your brand new certs in: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | ls /etc/letsencrypt/live/ | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Tailor to your server and distro using the `--hooks-server` option. So far, the | ||||||
|  | following are supported (contributions for additional servers welcome): | ||||||
|  | 
 | ||||||
|  | * apache2-debian | ||||||
|  | 
 | ||||||
|  | To tweak it for your setup and taste, see all the `hooks-` options in the | ||||||
|  | Command Line Options section below. Also note that the following substitutions | ||||||
|  | are available for use in the hooks and the template: | ||||||
|  | 
 | ||||||
|  | * `{{{token}}}`: the token | ||||||
|  | * `{{{domain}}}`: the domain for which a certificate is being sought (beware of | ||||||
|  |   this if using multiple domains per certificate) | ||||||
|  | * `{{{subject}}}`: the domain for which the generated challenge-fulfilling | ||||||
|  |   certificate must be used (only available when generating it) | ||||||
|  | * `{{{cert}}}`: the path to the generated certificate: `hooks-path/token.crt` | ||||||
|  | * `{{{privkey}}}`: the path to the generated private key: `hooks-path/token.key` | ||||||
|  | * `{{{conf}}}`: the path to the generated config file: `hooks-path/token.conf` | ||||||
|  | * `{{{bind}}}`: the value of the `hooks-bind` option | ||||||
|  | * `{{{port}}}`: the value of the `hooks-port` option | ||||||
|  | * `{{{webroot}}}`: the value of the `hooks-webroot` option | ||||||
|  | 
 | ||||||
| ### Interactive (for debugging) | ### Interactive (for debugging) | ||||||
| 
 | 
 | ||||||
| The token (for all challenge types) and keyAuthorization (only for https-01) | The token (for all challenge types) and keyAuthorization (only for https-01) | ||||||
| @ -360,6 +310,11 @@ Options: | |||||||
| 
 | 
 | ||||||
|       --renew-within [NUMBER]   Renew certificates this many days before expiry. (default: 7) |       --renew-within [NUMBER]   Renew certificates this many days before expiry. (default: 7) | ||||||
| 
 | 
 | ||||||
|  |       --duplicate BOOLEAN       Allow getting a certificate that duplicates an existing one/is | ||||||
|  |                                 an early renewal. | ||||||
|  | 
 | ||||||
|  |       --rsa-key-size [NUMBER]   Size (in bits) of the RSA key. (Default is 2048) | ||||||
|  | 
 | ||||||
|       --cert-path STRING        Path to where new cert.pem is saved |       --cert-path STRING        Path to where new cert.pem is saved | ||||||
|                                 (Default is :conf/live/:hostname/cert.pem) |                                 (Default is :conf/live/:hostname/cert.pem) | ||||||
| 
 | 
 | ||||||
| @ -371,8 +326,13 @@ Options: | |||||||
| 
 | 
 | ||||||
|       --domain-key-path STRING  Path to privkey.pem to use for domain (default: generate new) |       --domain-key-path STRING  Path to privkey.pem to use for domain (default: generate new) | ||||||
| 
 | 
 | ||||||
|  |       --account-key-path STRING Path to privkey.pem to use for account (default: generate new) | ||||||
|  | 
 | ||||||
|       --config-dir STRING       Configuration directory. (Default is ~/letsencrypt/etc/) |       --config-dir STRING       Configuration directory. (Default is ~/letsencrypt/etc/) | ||||||
| 
 | 
 | ||||||
|  |       --tls-sni-01-port NUMBER  Use TLS-SNI-01 challenge type with this port. | ||||||
|  |                                 (must be 443 with most production servers) (Boulder allows 5001 in testing mode) | ||||||
|  | 
 | ||||||
|       --http-01-port [NUMBER]   Use HTTP-01 challenge type with this port, used for SimpleHttp challenge. (Default is 80) |       --http-01-port [NUMBER]   Use HTTP-01 challenge type with this port, used for SimpleHttp challenge. (Default is 80) | ||||||
|                                 (must be 80 with most production servers) |                                 (must be 80 with most production servers) | ||||||
| 
 | 
 | ||||||
| @ -387,6 +347,35 @@ Options: | |||||||
| 
 | 
 | ||||||
|       --webroot-path STRING     public_html / webroot path. |       --webroot-path STRING     public_html / webroot path. | ||||||
| 
 | 
 | ||||||
|  |       --hooks BOOLEAN           Obtain certs with hooks that configure a webserver to meet TLS-SNI-01 challenges. | ||||||
|  | 
 | ||||||
|  |       --hooks-path STRING       Path in which to store files for hooks. | ||||||
|  |                                 (Default is ~/letsencrypt/apache) | ||||||
|  | 
 | ||||||
|  |       --hooks-server STRING     Type of webserver to configure. Sets defaults for all the following --hooks- options. | ||||||
|  |                                 Either --hooks-server or --hooks-template must be given. | ||||||
|  |                                 (See the Hooks section above for a list of supported servers.) | ||||||
|  | 
 | ||||||
|  |       --hooks-template STRING   Template to use for hooks configuration file. | ||||||
|  |                                 Either --hooks-server or --hooks-template must be given. | ||||||
|  | 
 | ||||||
|  |       --hooks-bind STRING       IP address to use in configuration for hooks. (Default is *) | ||||||
|  | 
 | ||||||
|  |       --hooks-port STRING       Port to use in configuration for hooks. (Default is 443) | ||||||
|  | 
 | ||||||
|  |       --hooks-webroot STRING    Webroot to use in configuration for hooks (e.g. empty dir). | ||||||
|  |                                 Nothing should actually be served from here. (Default is /var/www) | ||||||
|  | 
 | ||||||
|  |       --hooks-pre-enable STRING Hook to check the webserver configuration prior to enabling. | ||||||
|  | 
 | ||||||
|  |       --hooks-enable STRING     Hook to enable the webserver configuration. | ||||||
|  | 
 | ||||||
|  |       --hooks-pre-reload STRING Hook to check the webserver configuration prior to reloading. | ||||||
|  | 
 | ||||||
|  |       --hooks-reload STRING     Hook to reload the webserver. | ||||||
|  | 
 | ||||||
|  |       --hooks-disable STRING    Hook to disable the webserver configuration. | ||||||
|  | 
 | ||||||
|       --debug BOOLEAN           show traces and logs |       --debug BOOLEAN           show traces and logs | ||||||
| 
 | 
 | ||||||
|   -h, --help                    Display help and usage details |   -h, --help                    Display help and usage details | ||||||
|  | |||||||
| @ -6,75 +6,52 @@ var mkdirp = require('mkdirp'); | |||||||
| 
 | 
 | ||||||
| cli.parse({ | cli.parse({ | ||||||
|   'acme-version': |   'acme-version': | ||||||
|     [ false, " v01 (Let's Encrypt v01) or draft-11 (Let's Encrypt v02) (default: draft-11)", 'string' |     [ false, " v01 (Let's Encrypt v01) or draft-11 (Let's Encrypt v02) (default: draft-11)", 'string', 'draft-11' ] | ||||||
|     , 'draft-11' ] |  | ||||||
| , 'acme-url': | , 'acme-url': | ||||||
|     [ false, " ACME API Directory URL (default: https://acme-v02.api.letsencrypt.org/directory", 'string' |     [ false, " ACME API Directory URL (default: https://acme-v02.api.letsencrypt.org/directory", 'string', '' ] | ||||||
|     , 'https://acme-staging-v02.api.letsencrypt.org/directory' ] |  | ||||||
| 
 |  | ||||||
| , 'aol-keyword-www': |  | ||||||
|     [ false, " Travel back in time to 1995 where we redirect bare domains as to have a triple-w prefix", 'string' |  | ||||||
|     , false ] |  | ||||||
| , config: | , config: | ||||||
|     [ 'c', " Path to configuration file --config /etc/greenlock/greenlock.yml (default: '')", 'string' ] |     [ 'c', " Path to configuration file --config /etc/greenlock/greenlock.yml (default: '')", 'string' ] | ||||||
| , serve: | , serve: | ||||||
|     [ false, " Run as webserver (default: false)", 'boolean' |     [ false, " Run as webserver (default: false)", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| , email: | , email: | ||||||
|     [ false, " Email used for registration and recovery contact (default: '')", 'email' ] |     [ false, " Email used for registration and recovery contact (default: '')", 'email', '' ] | ||||||
| , analytics: | , analytics: | ||||||
|     [ false, " Share analytics with greenlock (default: false)", 'boolean' |     [ false, " Share analytics with greenlock (default: false)", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| , community: | , community: | ||||||
|     [ false, " Join the greenlock community to get important updates (default: false)", 'boolean' |     [ false, " Join the greenlock community to get important updates (default: false)", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| , 'agree-tos': | , 'agree-tos': | ||||||
|     [ false, " Agree to the Let's Encrypt Subscriber Agreement", 'boolean' |     [ false, " Agree to the Let's Encrypt Subscriber Agreement", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| , domains: | , domains: | ||||||
|     [ false, " Comma-separated list of domains to secure (default: [])", 'string' ] |     [ false, " Comma-separated list of domains to secure (default: [])", 'string' ] | ||||||
| , 'config-dir': | , 'config-dir': | ||||||
|     [ false, " Configuration directory.", 'string' |     [ false, " Configuration directory.", 'string', '~/acme/etc/' ] | ||||||
|     , '~/acme/etc/' ] |  | ||||||
| , 'cert-path': | , 'cert-path': | ||||||
|     [ false, " Path where new cert.pem is saved", 'string' |     [ false, " Path where new cert.pem is saved", 'string',':configDir/live/:hostname/cert.pem' ] | ||||||
|     , ':configDir/live/:hostname/cert.pem' ] |  | ||||||
| , 'fullchain-path': | , 'fullchain-path': | ||||||
|     [ false, " Path where new fullchain.pem (cert + chain) is saved", 'string' |     [ false, " Path where new fullchain.pem (cert + chain) is saved", 'string', ':configDir/live/:hostname/fullchain.pem' ] | ||||||
|     , ':configDir/live/:hostname/fullchain.pem' ] |  | ||||||
| , 'chain-path': | , 'chain-path': | ||||||
|     [ false, " Path where new chain.pem is saved", 'string' |     [ false, " Path where new chain.pem is saved", 'string', ':configDir/live/:hostname/chain.pem' ] | ||||||
|     , ':configDir/live/:hostname/chain.pem' ] |  | ||||||
| , 'bundle-path': | , 'bundle-path': | ||||||
|     [ false, " Path where new bundle.pem (fullchain + privkey) is saved", 'string' |     [ false, " Path where new bundle.pem (fullchain + privkey) is saved", 'string', ':configDir/live/:hostname/bundle.pem' ] | ||||||
|     , ':configDir/live/:hostname/bundle.pem' ] |  | ||||||
| , 'privkey-path': | , 'privkey-path': | ||||||
|     [ false, " Path where (new or existing) domain privkey.pem is saved", 'string' |     [ false, " Path where (new or existing) domain privkey.pem is saved", 'string', ':configDir/live/:hostname/privkey.pem' ] | ||||||
|     , ':configDir/live/:hostname/privkey.pem' ] | , 'root': | ||||||
| , 'webroot': |     [ false, " public_html / webroot path /srv/www/:hostname", 'string' ] | ||||||
|     [ false, " public_html / webroot path such as /srv/www/:hostname", 'string' ] |  | ||||||
| , 'renew-within': | , 'renew-within': | ||||||
|     [ false, " Renew certificates this many days before expiry", 'int' |     [ false, " Renew certificates this many days before expiry", 'int', 11 ] | ||||||
|     , 11 ] |  | ||||||
| , staging: |  | ||||||
|     [ false, " Use Let's Encrypt v02 staging API", 'boolean' |  | ||||||
|     , false ] |  | ||||||
| , standalone: | , standalone: | ||||||
|     [ false, " Obtain certs using a \"standalone\" webserver", 'boolean' |     [ false, " Obtain certs using a \"standalone\" webserver.", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| , manual: | , manual: | ||||||
|     [ false, " Print the token and key to the screen and wait for you to hit enter, giving you time to copy it somewhere before continuing (default: false)", 'boolean' |     [ false, " Print the token and key to the screen and wait for you to hit enter, giving you time to copy it somewhere before continuing (default: false)", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| , debug: | , debug: | ||||||
|     [ false, " show traces and logs", 'boolean' |     [ false, " show traces and logs", 'boolean', false ] | ||||||
|     , false ] |  | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // ignore certonly and extraneous arguments
 | // ignore certonly and extraneous arguments
 | ||||||
| cli.main(function(_, options) { | cli.main(function(_, options) { | ||||||
|   console.log(''); |   console.log(''); | ||||||
|   var args = {}; |   var args = {}; | ||||||
|   var homedir = require('os').homedir(); |   var homedir = require('homedir')(); | ||||||
| 
 | 
 | ||||||
|   Object.keys(options).forEach(function (key) { |   Object.keys(options).forEach(function (key) { | ||||||
|     var val = options[key]; |     var val = options[key]; | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								example-standalone.bash
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								example-standalone.bash
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | node bin/letsencrypt certonly \ | ||||||
|  |   --agree-tos --email 'john.doe@gmail.com' \ | ||||||
|  |   --standalone \ | ||||||
|  |   --domains example.com,www.example.com \ | ||||||
|  |   --server https://acme-staging.api.letsencrypt.org/directory \ | ||||||
|  |   --config-dir ~/letsencrypt.test/etc | ||||||
| @ -1,8 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| greenlock \ |  | ||||||
|   --agree-tos --email 'john.doe@gmail.com' \ |  | ||||||
|   --serve |  | ||||||
|   --root /root/www/example.com \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --config-dir ~/acme.test/etc |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| greenlock \ |  | ||||||
|   --agree-tos --email 'john.doe@gmail.com' \ |  | ||||||
|   --standalone \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --config-dir ~/acme.test/etc |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| greenlock \ |  | ||||||
|   --agree-tos --email 'john.doe@gmail.com' \ |  | ||||||
|   --root /root/www/example.com \ |  | ||||||
|   --domains example.com,www.example.com \ |  | ||||||
|   --config-dir ~/acme.test/etc |  | ||||||
							
								
								
									
										14
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								package.json
									
									
									
									
									
								
							| @ -34,11 +34,15 @@ | |||||||
|   }, |   }, | ||||||
|   "homepage": "https://git.coolaj86.com/coolaj86/greenlock-cli.js", |   "homepage": "https://git.coolaj86.com/coolaj86/greenlock-cli.js", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "cli": "^1.0.1", |     "cli": "^0.11.1", | ||||||
|     "greenlock": "^2.2.11", |     "greenlock": "^2.1.16", | ||||||
|     "le-challenge-manual": "^2.1.0", |     "homedir": "^0.6.0", | ||||||
|     "le-challenge-standalone": "^2.1.0", |     "le-acme-core": "^2.0.5", | ||||||
|     "le-store-certbot": "^2.1.0", |     "le-challenge-hooks": "^2.0.0", | ||||||
|  |     "le-challenge-manual": "^2.0.0", | ||||||
|  |     "le-challenge-sni": "^2.0.0", | ||||||
|  |     "le-challenge-standalone": "^2.0.0", | ||||||
|  |     "le-store-certbot": "^2.0.2", | ||||||
|     "mkdirp": "^0.5.1" |     "mkdirp": "^0.5.1" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user