X-Git-Url: https://git.street.me.uk/andy/dehydrated.git/blobdiff_plain/12c566b1d6e45f0f27cd421a7bf80ac47610e891..3d8d320c9f5a8dbd2621de28cd02f8ba15be5dbf:/README.md diff --git a/README.md b/README.md index 5c0b3e1..b3eab9f 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,74 @@ -# letsencrypt.sh +# dehydrated [![Build Status](https://travis-ci.org/lukas2511/dehydrated.svg?branch=master)](https://travis-ci.org/lukas2511/dehydrated) -This is a client for signing certificates with an ACME-server (currently only provided by letsencrypt) implemented as a relatively simple shell-script. +![](docs/logo.jpg) -It uses the `openssl` utility for everything related to actually handling keys and certificates, so you need to have that installed. +This is a client for signing certificates with an ACME-server (currently only provided by Let's Encrypt) implemented as a relatively simple bash-script. -Other dependencies are (for now): curl, sed +It uses the `openssl` utility for everything related to actually handling keys and certificates, so you need to have that installed. -Perl no longer is a dependency. -The only remaining perl code in this repository is the script you can use to convert your existing letsencrypt-keyfile into something openssl (and this script) can read. +Other dependencies are: cURL, sed, grep, mktemp (all found on almost any system, cURL being the only exception) Current features: - Signing of a list of domains -- Renewal if a certificate is about to expire +- Signing of a CSR +- Renewal if a certificate is about to expire or SAN (subdomains) changed - Certificate revocation -Please keep in mind that this software and even the acme-protocol are relatively young and may still have some unresolved issues. -Feel free to report any issues you find with this script or contribute by submitting a pullrequest. +Please keep in mind that this software and even the acme-protocol are relatively young and may still have some unresolved issues. Feel free to report any issues you find with this script or contribute by submitting a pull request. -## Usage: +## Getting started -Add domains to domains.txt like in this example: +For getting started I recommend taking a look at [docs/domains_txt.md](docs/domains_txt.md), [docs/wellknown.md](docs/wellknown.md) and the [Usage](#usage) section on this page (you'll probably only need the `-c` option). -``` -example.com www.example.com -example.net www.example.net wiki.example.net -``` +Generally you want to set up your WELLKNOWN path first, and then fill in domains.txt. -This states that there should be two certificates `example.com` and `example.net`, -with the other domains in the corresponding line being their alternative names. +**Please note that you should use the staging URL when experimenting with this script to not hit Let's Encrypt's rate limits.** See [docs/staging.md](docs/staging.md). -You'll also need to set up a webserver to serve the challenge-response directory as configured with `$WELLKNOWN`, -or you can use the hook in the script if you want to deploy it some other way (e.g. copy it to a server via scp). +If you have any problems take a look at our [Troubleshooting](docs/troubleshooting.md) guide. -After doing those two things you can just `./letsencrypt.sh`, and it should generate certificates. +## Config -It can be used inside a cronjob as it automatically detects if a certificate is about to expire. +dehydrated is looking for a config file in a few different places, it will use the first one it can find in this order: -### Certificate revocation +- `/etc/dehydrated/config` +- `/usr/local/etc/dehydrated/config` +- The current working directory of your shell +- The directory from which dehydrated was ran -Usage: `./letsencrypt.sh revoke path/to/cert.pem` +Have a look at [docs/examples/config](docs/examples/config) to get started, copy it to e.g. `/etc/dehydrated/config` +and edit it to fit your needs. -### nginx config - -If you want to use nginx you can set up a location block to serve your challenge responses: +## Usage: +```text +Usage: ./dehydrated [-h] [command [argument]] [parameter [argument]] [parameter [argument]] ... + +Default command: help + +Commands: + --register Register account key + --cron (-c) Sign/renew non-existant/changed/expiring certificates. + --signcsr (-s) path/to/csr.pem Sign a given CSR, output CRT on stdout (advanced usage) + --revoke (-r) path/to/cert.pem Revoke specified certificate + --cleanup (-gc) Move unused certificate files to archive directory + --help (-h) Show help text + --env (-e) Output configuration variables for use in other scripts + +Parameters: + --accept-terms Accept CAs terms of service + --full-chain (-fc) Print full chain when using --signcsr + --ipv4 (-4) Resolve names to IPv4 addresses only + --ipv6 (-6) Resolve names to IPv6 addresses only + --domain (-d) domain.tld Use specified domain name(s) instead of domains.txt entry (one certificate!) + --keep-going (-g) Keep going after encountering an error while creating/renewing multiple certificates in cron mode + --force (-x) Force renew of certificate even if it is longer valid than value in RENEW_DAYS + --no-lock (-n) Don't use lockfile (potentially dangerous!) + --lock-suffix example.com Suffix lockfile name with a string (useful for with -d) + --ocsp Sets option in CSR indicating OCSP stapling to be mandatory + --privkey (-p) path/to/key.pem Use specified private key instead of account key (useful for revocation) + --config (-f) path/to/config Use specified config file + --hook (-k) path/to/hook.sh Use specified script for hooks + --out (-o) certs/directory Output certificates into the specified directory + --challenge (-t) http-01|dns-01 Which challenge should be used? Currently http-01 and dns-01 are supported + --algo (-a) rsa|prime256v1|secp384r1 Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1 ``` -location /.well-known/acme-challenge { - root /var/www/letsencrypt; -} -``` - -## Import - -### import-account.pl - -This perl-script can be used to import the account key from the original letsencrypt client. - -You should copy `private_key.json` to the same directory as the script. -The json-file can be found in a subdirectory of `/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory`. - -Usage: `perl import-account.pl` - -### import-certs.sh - -This script can be used to import private keys and certificates created by the original letsencrypt client. - -By default it expects the certificates to be found under `/etc/letsencrypt`, which is the default output directory of the original client. -You can change the path by setting LETSENCRYPT in your config file: ```LETSENCRYPT="/etc/letsencrypt"```. - -Usage: `./import-certs.sh`