]> git.street.me.uk Git - andy/dehydrated.git/blame - README.md
Add extract_altnames() function
[andy/dehydrated.git] / README.md
CommitLineData
7664f1c2 1# letsencrypt.sh [![Build Status](https://travis-ci.org/lukas2511/letsencrypt.sh.svg?branch=master)](https://travis-ci.org/lukas2511/letsencrypt.sh)
61f0b7ed 2
e567a87e 3This is a client for signing certificates with an ACME-server (currently only provided by letsencrypt) implemented as a relatively simple bash-script.
274e8e41
LS
4
5It uses the `openssl` utility for everything related to actually handling keys and certificates, so you need to have that installed.
6
e45f28bb 7Other dependencies are: curl, sed, grep, mktemp (all found on almost any system, curl being the only exception)
274e8e41
LS
8
9Current features:
10- Signing of a list of domains
e45f28bb 11- Renewal if a certificate is about to expire or SAN (subdomains) changed
12c566b1 12- Certificate revocation
274e8e41 13
5878f16a
LS
14If you want to import existing keys from the official letsencrypt client have a look at [Import from official letsencrypt client](https://github.com/lukas2511/letsencrypt.sh/wiki/Import-from-official-letsencrypt-client).
15
274e8e41
LS
16Please keep in mind that this software and even the acme-protocol are relatively young and may still have some unresolved issues.
17Feel free to report any issues you find with this script or contribute by submitting a pullrequest.
0d7913ab
LS
18
19## Usage:
20
8662a000
LS
21```text
22Usage: ./letsencrypt.sh [-h] [command [argument]] [parameter [argument]] [parameter [argument]] ...
0d7913ab 23
083c6736 24Default command: help
8662a000
LS
25
26Commands:
083c6736 27 --cron (-c) Sign/renew non-existant/changed/expiring certificates.
8662a000
LS
28 --revoke (-r) path/to/cert.pem Revoke specified certificate
29 --help (-h) Show help text
30 --env (-e) Output configuration variables for use in other scripts
31
32Parameters:
92a822e0
LS
33 --domain (-d) domain.tld Use specified domain name(s) instead of domains.txt entry (one certificate!)
34 --force (-x) Force renew of certificate even if it is longer valid than value in RENEW_DAYS
8662a000 35 --privkey (-p) path/to/key.pem Use specified private key instead of account key (useful for revocation)
92a822e0 36 --config (-f) path/to/config.sh Use specified config file
ed27e013 37 --hook (-k) path/to/hook.sh Use specified script for hooks
e925b293 38 --challenge (-t) http-01|dns-01 Which challenge should be used? Currently http-01 and dns-01 are supported
0d7913ab 39```
8662a000
LS
40
41### domains.txt
42
43The file `domains.txt` should have the following format:
44
45```text
0d7913ab
LS
46example.com www.example.com
47example.net www.example.net wiki.example.net
48```
49
50This states that there should be two certificates `example.com` and `example.net`,
51with the other domains in the corresponding line being their alternative names.
52
7b968344 53### $WELLKNOWN / challenge-response
0d7913ab 54
7b968344 55Boulder (acme-server) is looking for challenge responses under your domain in the `.well-known/acme-challenge` directory
0d7913ab 56
92a822e0 57This script uses `http-01`-type verification (for now) so you need to have that directory available over normal http (no ssl).
7b968344
LS
58
59A full URL would look like `http://example.org/.well-known/acme-challenge/c3VjaC1jaGFsbGVuZ2UtbXVjaA-aW52YWxpZC13b3c`.
60
61An example setup to get this to work would be:
62
63nginx.conf:
0d7913ab 64```
7b968344 65...
0d7913ab 66location /.well-known/acme-challenge {
7b968344 67 alias /var/www/letsencrypt;
0d7913ab 68}
7b968344
LS
69...
70```
71
72config.sh:
73```bash
74...
75WELLKNOWN="/var/www/letsencrypt"
76...
0d7913ab
LS
77```
78
7b968344
LS
79An alternative to setting the WELLKNOWN variable would be to create a symlink to the default location next to the script (or BASEDIR):
80`ln -s /var/www/letsencrypt .acme-challenges`
8662a000 81
e925b293
MG
82### dns-01 challenge
83
9b78b251 84This script also supports the new `dns-01`-type verification. Be aware that at the moment this is not available on the production servers from letsencrypt. Please read https://community.letsencrypt.org/t/dns-challenge-is-in-staging/8322 for the current state of `dns-01` support.
e925b293
MG
85
86You need a hook script that deploys the challenge to your DNS server!
c71ca3a8
MG
87
88### Elliptic Curve Cryptography (ECC)
89
90This script also supports certificates with Elliptic Curve public keys! Be aware that at the moment this is not available on the production servers from letsencrypt. Please read https://community.letsencrypt.org/t/ecdsa-testing-on-staging/8809/ for the current state of ECC support.