| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | serve-https | 
					
						
							|  |  |  | =========== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 01:46:01 -06:00
										 |  |  | A simple HTTPS static file server with valid TLS (SSL) certs. | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 01:46:01 -06:00
										 |  |  | Comes bundled a valid certificate for localhost.daplie.com, | 
					
						
							|  |  |  | which is great for testing and development, and you can specify your own. | 
					
						
							| 
									
										
										
										
											2015-06-30 17:11:01 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | Also great for testing ACME certs from letsencrypt.org. | 
					
						
							| 
									
										
										
										
											2015-06-24 15:44:42 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Install | 
					
						
							|  |  |  | ------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | npm install --global serve-https | 
					
						
							|  |  |  | serve-https | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2015-07-08 00:45:40 -06:00
										 |  |  | Serving /Users/foo/ at https://localhost.daplie.com:8443 | 
					
						
							| 
									
										
										
										
											2015-06-24 15:44:42 -06:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Usage | 
					
						
							|  |  |  | ----- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 00:45:40 -06:00
										 |  |  | * `-p <port>` - i.e. `sudo serve-https -p 443` (defaults to 8443) | 
					
						
							|  |  |  | * `-d <dirpath>` - i.e. `serve-https -d /tmp/` (defaults to `pwd`) | 
					
						
							|  |  |  | * `-c <content>` - i.e. `server-https -c 'Hello, World! '` (defaults to directory index) | 
					
						
							| 
									
										
										
										
											2016-08-06 12:34:15 -06:00
										 |  |  | * `--express-app` - path to a file the exports an express-style app (`function (req, res, next) { ... }`) | 
					
						
							| 
									
										
										
										
											2015-12-05 22:54:47 -08:00
										 |  |  | * `--livereload` - inject livereload into all html pages (see also: [fswatch](http://stackoverflow.com/a/13807906/151312)) | 
					
						
							| 
									
										
										
										
											2015-07-08 00:45:40 -06:00
										 |  |  | * `--insecure-port <port>` - run an http server that redirects to https (off by default) | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Specifying a custom HTTPS certificate: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 01:46:01 -06:00
										 |  |  | * `--key /path/to/privkey.pem` specifies the server private key | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  | * `--cert /path/to/fullchain.pem` specifies the bundle of server certificate and all intermediate certificates | 
					
						
							|  |  |  | * `--root /path/to/root.pem` specifies the certificate authority(ies) | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  | Note: `--root` may specify single cert or a bundle, and may be used multiple times like so: | 
					
						
							| 
									
										
										
										
											2015-07-08 01:46:01 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  | --root /path/to/primary-root.pem --root /path/to/cross-root.pem | 
					
						
							| 
									
										
										
										
											2015-07-08 01:46:01 -06:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Other options: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  | * `--serve-root true` alias for `-c` with the contents of root.pem | 
					
						
							| 
									
										
										
										
											2015-07-08 01:46:01 -06:00
										 |  |  | * `--servername example.com` changes the servername logged to the console | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  | * `--letsencrypt-certs example.com` sets and key, fullchain, and root to standard letsencrypt locations | 
					
						
							| 
									
										
										
										
											2015-06-30 17:11:01 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Examples | 
					
						
							|  |  |  | -------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | serve-https -p 1443 -c 'Hello from 1443' & | 
					
						
							|  |  |  | serve-https -p 2443 -c 'Hello from 2443' & | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | serve-https -p 3443 -d /tmp --insecure-port 4080 & | 
					
						
							| 
									
										
										
										
											2015-06-30 17:11:01 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | curl https://localhost.daplie.com:1443 | 
					
						
							|  |  |  | > Hello from 1443
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | curl --insecure https://localhost:2443 | 
					
						
							|  |  |  | > Hello from 2443
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | curl https://localhost.daplie.com:3443 | 
					
						
							|  |  |  | > [html index listing of /tmp]
 | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | And if you tested <http://localhost.daplie.com:4080> in a browser, | 
					
						
							|  |  |  | it would redirect to <https://localhost.daplie.com:3443>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (in curl it would just show an error message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Testing ACME Let's Encrypt certs
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 00:51:38 -06:00
										 |  |  | In case you didn't know, you can get free https certificates from | 
					
						
							|  |  |  | [letsencrypt.org](https://letsencrypt.org) | 
					
						
							| 
									
										
										
										
											2015-07-08 00:48:18 -06:00
										 |  |  | (ACME letsencrypt) | 
					
						
							|  |  |  | and even a free subdomain from <https://freedns.afraid.org>. | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 00:51:38 -06:00
										 |  |  | If you want to quickly test the certificates you installed, | 
					
						
							|  |  |  | you can do so like this: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2015-07-08 01:27:14 -06:00
										 |  |  | sudo serve-https -p 8443 \ | 
					
						
							|  |  |  |   --letsencrypt-certs test.mooo.com \ | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  |   --serve-root true | 
					
						
							| 
									
										
										
										
											2015-07-08 01:27:14 -06:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | which is equilavent to | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | sudo serve-https -p 8443 \ | 
					
						
							|  |  |  |   --servername test.mooo.com | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  |   --key /etc/letsencrypt/live/test.mooo.com/privkey.pem \ | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  |   --cert /etc/letsencrypt/live/test.mooo.com/fullchain.pem \ | 
					
						
							|  |  |  |   --root /etc/letsencrypt/live/test.mooo.com/root.pem \ | 
					
						
							|  |  |  |   -c "$(cat 'sudo /etc/letsencrypt/live/test.mooo.com/root.pem')" | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 01:27:14 -06:00
										 |  |  | and can be tested like so | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2015-07-13 17:46:44 -06:00
										 |  |  | curl --insecure https://test.mooo.com:8443 > ./root.pem | 
					
						
							|  |  |  | curl https://test.mooo.com:8843 --cacert ./root.pem | 
					
						
							| 
									
										
										
										
											2015-07-08 00:43:46 -06:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * [QuickStart Guide for Let's Encrypt](https://coolaj86.com/articles/lets-encrypt-on-raspberry-pi/) | 
					
						
							|  |  |  | * [QuickStart Guide for FreeDNS](https://coolaj86.com/articles/free-dns-hosting-with-freedns-afraid-org.html) |