Back to rankings

dehydrated-io/dehydrated

Shelldehydrated.io

ACME client implemented as a simple shell-script – just add water

certificatesigningletsencryptacmebashzshshellzerossl
Star Growth
Stars
6.2k
Forks
724
Weekly Growth
Issues
64
2k4k6k
Dec 2015Jun 2019Jan 2023Jul 2026
README

ZeroSSL

Dehydrated is a client for signing certificates with an ACME-server (e.g. ZeroSSL, Let's Encrypt, etc.) implemented as a relatively simple (zsh-compatible) bash-script. This client supports both ACME v1 and the new ACME v2 including support for wildcard certificates!

It uses the openssl utility for everything related to actually handling keys and certificates, so you need to have that installed.

Other dependencies are: cURL, sed, grep, awk, mktemp (all found pre-installed on almost any system, cURL being the only exception).


Current features

  • Signing of a list of domains (including wildcard domains!)
  • Signing of a custom CSR (either standalone or completely automated using hooks!)
  • Renewal if a certificate is about to expire or defined set of domains changed
  • Certificate revocation
  • and lots more..

Feel free to report any issues you find with this script or contribute by submitting a pull request, but please check for duplicates first (feel free to comment on those to get things rolling).

Getting started

For getting started I recommend taking a look at docs/domains_txt.md, docs/wellknown.md and the Usage section on this page (you'll probably only need the -c option).

Generally you want to set up your WELLKNOWN path first, and then fill in domains.txt.

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.

If you have any problems take a look at our Troubleshooting guide.

Config

dehydrated is looking for a config file in a few different places, it will use the first one it can find in this order:

  • /etc/dehydrated/config
  • /usr/local/etc/dehydrated/config
  • The current working directory of your shell
  • The directory from which dehydrated was run

Have a look at docs/examples/config to get started, copy it to e.g. /etc/dehydrated/config and edit it to fit your needs.

Usage:

Usage: ./dehydrated [-h] [command [argument]] [parameter [argument]] [parameter [argument]] ...

Default command: help

Commands:
 --version (-v)                   Print version information
 --display-terms                  Display current terms of service
 --register                       Register account key
 --account                        Update account contact information
 --cron (-c)                      Sign/renew non-existent/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
 --deactivate                     Deactivate account
 --cleanup (-gc)                  Move unused certificate files to archive directory
 --cleanup-delete (-gcd)          Deletes (!) unused certificate files
 --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!)
 --ca url/preset                  Use specified CA URL or preset
 --alias certalias                Use specified name for certificate directory (and per-certificate config) instead of the primary domain (only used if --domain is specified)
 --keep-going (-g)                Keep going after encountering an error while creating/renewing multiple certificates in cron mode
 --force (-x)                     Force certificate renewal even if it is not due to expire within RENEW_DAYS
 --force-validation               Force revalidation of domain names (used in combination with --force)
 --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)
 --domains-txt path/to/domains.txt Use specified domains.txt instead of default/configured one
 --config (-f) path/to/config     Use specified config file
 --hook (-k) path/to/hook.sh      Use specified script for hooks
 --preferred-chain issuer-cn      Use alternative certificate chain identified by issuer CN
 --out (-o) certs/directory       Output certificates into the specified directory
 --alpn alpn-certs/directory      Output alpn verification certificates into the specified directory
 --challenge (-t) http-01|dns-01|dns-persist-01|tls-alpn-01 Which challenge should be used? Currently http-01, dns-01, dns-persist-01 and tls-alpn-01 are supported
 --algo (-a) rsa|prime256v1|secp384r1 Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1
 --acme-profile profile_name      Use specified ACME profile
 --order-timeout seconds          Amount of seconds to wait for processing of order until erroring out
 --validation-timeout seconds     Amount of seconds to wait for processing of domain validations until erroring out

Chat

Dehydrated has an official IRC-channel #dehydrated on libera.chat that can be used for general discussion and suggestions.

The channel can also be accessed with Matrix using the official libera.chat bridge at #dehydrated:libera.chat.

About this repository

[!NOTE] This repository is officially maintained by ZeroSSL as part of our commitment to secure and reliable SSL/TLS solutions. We welcome contributions and feedback from the community!
For more information about our services, including free and paid SSL/TLS certificates, visit https://zerossl.com.

ZeroSSL

Related repositories
certbot/certbot

Certbot is EFF's tool to obtain certs from Let's Encrypt and (optionally) auto-enable HTTPS on your server. It can also act as a client for any other CA that uses the ACME protocol.

PythonPyPIOtheracmeacme-client
33.1k3.5k
gravitational/teleport

The easiest, and most secure way to access and protect all of your infrastructure.

GoGo ModulesGNU Affero General Public License v3.0sshgo
goteleport.com
20.7k2.1k
cert-manager/cert-manager

Automatically provision and manage TLS certificates in Kubernetes

GoGo ModulesApache License 2.0kubernetesletsencrypt
cert-manager.io
14k2.4k
go-acme/lego

Let's Encrypt/ACME client and library written in Go

GoGo ModulesMIT Licenseletsencryptacme
go-acme.github.io/lego/
9.8k1.2k
certimate-go/certimate

An open-source and free self-hosted SSL certificates ACME tool, automates the full-cycle of issuance, deployment, renewal, and monitoring visually. 完全开源免费的自托管 SSL 证书 ACME 工具,申请、部署、续期、监控全流程自动化可视化,支持各大主流云厂商。

GoGo ModulesMIT Licensessl-certificatessl-certificates
docs.certimate.me
8.8k854
digitalbazaar/forge

A native implementation of TLS in Javascript and tools to write crypto-based and network-heavy webapps

JavaScriptnpmOthercryptocryptography
digitalbazaar.com
5.3k844
PanXProject/awesome-certificates

Curated list of 20,000+ hours and 200+ free courses with certificates in IT, CS, Design and Business.

Creative Commons Zero v1.0 Universalbadgescertificate
panx.io/awesome-certificates/
5.1k422
novnc/websockify

Websockify is a WebSocket to TCP proxy/bridge. This allows a browser to connect to any application/server/service.

PythonPyPIGNU Lesser General Public License v3.0websockifywebsockets
4.4k837
smallstep/cli

🧰 A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc.

GoGo ModulesApache License 2.0securitysecurity-tools
smallstep.com/cli
4.3k306
kjur/jsrsasign

CAUTION: END OF SUPPORT ON 3 JUN 2026. The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free cryptography library supporting RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, OCSP, CMS SignedData, TimeStamp, CAdES and JSON Web Signature/Token in pure JavaScript.

HTMLOtherasn1x509
kjur.github.io/jsrsasign
3.4k652
evertramos/nginx-proxy-automation

Automated docker nginx proxy integrated with letsencrypt.

ShellMIT Licensenginx-proxycertificate
2.9k643
square/certstrap

Tools to bootstrap CAs, certificate requests, and signed certificates.

GoGo ModulesApache License 2.0cryptogolang
2.4k211