{"id":13453966,"url":"https://github.com/dehydrated-io/dehydrated","last_synced_at":"2025-05-14T03:10:53.228Z","repository":{"id":38315086,"uuid":"47437268","full_name":"dehydrated-io/dehydrated","owner":"dehydrated-io","description":"letsencrypt/acme client implemented as a shell-script – just add water","archived":false,"fork":false,"pushed_at":"2025-04-23T09:29:33.000Z","size":890,"stargazers_count":6033,"open_issues_count":67,"forks_count":722,"subscribers_count":164,"default_branch":"master","last_synced_at":"2025-05-02T04:02:31.341Z","etag":null,"topics":["acme","bash","certificate","letsencrypt","shell","signing","zsh"],"latest_commit_sha":null,"homepage":"https://dehydrated.io","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dehydrated-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"lukas2511","custom":["https://paypal.me/lukas2511","http://www.amazon.de/registry/wishlist/1TUCFJK35IO4Q"]}},"created_at":"2015-12-05T01:31:53.000Z","updated_at":"2025-04-29T11:07:14.000Z","dependencies_parsed_at":"2023-01-22T09:01:02.335Z","dependency_job_id":"cd4b9fb4-5e87-42ce-a96d-4e580d8caa7c","html_url":"https://github.com/dehydrated-io/dehydrated","commit_stats":{"total_commits":632,"total_committers":102,"mean_commits":6.196078431372549,"dds":0.375,"last_synced_commit":"4fd777e87e589652b1127b79ac6688ed7cb151fe"},"previous_names":["lukas2511/letsencrypt.sh","lukas2511/dehydrated"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dehydrated-io%2Fdehydrated","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dehydrated-io%2Fdehydrated/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dehydrated-io%2Fdehydrated/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dehydrated-io%2Fdehydrated/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dehydrated-io","download_url":"https://codeload.github.com/dehydrated-io/dehydrated/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254059513,"owners_count":22007769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acme","bash","certificate","letsencrypt","shell","signing","zsh"],"created_at":"2024-07-31T08:00:49.856Z","updated_at":"2025-05-14T03:10:48.219Z","avatar_url":"https://github.com/dehydrated-io.png","language":"Shell","funding_links":["https://github.com/sponsors/lukas2511","https://paypal.me/lukas2511","http://www.amazon.de/registry/wishlist/1TUCFJK35IO4Q","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=23P9DSJBTY7C8"],"categories":["Shell","Let's Encrypt","Gaming","bash","shell"],"sub_categories":["Utils","Server Management :penguin:"],"readme":"# dehydrated [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=23P9DSJBTY7C8)\n\n![](docs/logo.png)\n\nDehydrated is a client for signing certificates with an ACME-server (e.g. Let's Encrypt) implemented as a relatively simple (zsh-compatible) bash-script.\nThis client supports both ACME v1 and the new ACME v2 including support for wildcard certificates!\n\nIt uses the `openssl` utility for everything related to actually handling keys and certificates, so you need to have that installed.\n\nOther dependencies are: cURL, sed, grep, awk, mktemp (all found pre-installed on almost any system, cURL being the only exception).\n\nCurrent features:\n- Signing of a list of domains (including wildcard domains!)\n- Signing of a custom CSR (either standalone or completely automated using hooks!)\n- Renewal if a certificate is about to expire or defined set of domains changed\n- Certificate revocation\n- and lots more..\n\nPlease keep in mind that this software, the ACME-protocol and all supported CA servers out there are relatively young and there might be a few issues. Feel free to report any issues you find with this script or contribute by submitting a pull request,\nbut please check for duplicates first (feel free to comment on those to get things rolling).\n\n## Getting started\n\nFor 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).\n\nGenerally you want to set up your WELLKNOWN path first, and then fill in domains.txt.\n\n**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).\n\nIf you have any problems take a look at our [Troubleshooting](docs/troubleshooting.md) guide.\n\n## Config\n\ndehydrated is looking for a config file in a few different places, it will use the first one it can find in this order:\n\n- `/etc/dehydrated/config`\n- `/usr/local/etc/dehydrated/config`\n- The current working directory of your shell\n- The directory from which dehydrated was run\n\nHave a look at [docs/examples/config](docs/examples/config) to get started, copy it to e.g. `/etc/dehydrated/config`\nand edit it to fit your needs.\n\n## Usage:\n\n```text\nUsage: ./dehydrated [-h] [command [argument]] [parameter [argument]] [parameter [argument]] ...\n\nDefault command: help\n\nCommands:\n --version (-v)                   Print version information\n --display-terms                  Display current terms of service\n --register                       Register account key\n --account                        Update account contact information\n --cron (-c)                      Sign/renew non-existent/changed/expiring certificates.\n --signcsr (-s) path/to/csr.pem   Sign a given CSR, output CRT on stdout (advanced usage)\n --revoke (-r) path/to/cert.pem   Revoke specified certificate\n --deactivate                     Deactivate account\n --cleanup (-gc)                  Move unused certificate files to archive directory\n --cleanup-delete (-gcd)          Deletes (!) unused certificate files\n --help (-h)                      Show help text\n --env (-e)                       Output configuration variables for use in other scripts\n\nParameters:\n --accept-terms                   Accept CAs terms of service\n --full-chain (-fc)               Print full chain when using --signcsr\n --ipv4 (-4)                      Resolve names to IPv4 addresses only\n --ipv6 (-6)                      Resolve names to IPv6 addresses only\n --domain (-d) domain.tld         Use specified domain name(s) instead of domains.txt entry (one certificate!)\n --ca url/preset                  Use specified CA URL or preset\n --alias certalias                Use specified name for certificate directory (and per-certificate config) instead of the primary domain (only used if --domain is specified)\n --keep-going (-g)                Keep going after encountering an error while creating/renewing multiple certificates in cron mode\n --force (-x)                     Force certificate renewal even if it is not due to expire within RENEW_DAYS\n --force-validation               Force revalidation of domain names (used in combination with --force)\n --no-lock (-n)                   Don't use lockfile (potentially dangerous!)\n --lock-suffix example.com        Suffix lockfile name with a string (useful for with -d)\n --ocsp                           Sets option in CSR indicating OCSP stapling to be mandatory\n --privkey (-p) path/to/key.pem   Use specified private key instead of account key (useful for revocation)\n --domains-txt path/to/domains.txt Use specified domains.txt instead of default/configured one\n --config (-f) path/to/config     Use specified config file\n --hook (-k) path/to/hook.sh      Use specified script for hooks\n --preferred-chain issuer-cn      Use alternative certificate chain identified by issuer CN\n --out (-o) certs/directory       Output certificates into the specified directory\n --alpn alpn-certs/directory      Output alpn verification certificates into the specified directory\n --challenge (-t) http-01|dns-01|tls-alpn-01 Which challenge should be used? Currently http-01, dns-01, and tls-alpn-01 are supported\n --algo (-a) rsa|prime256v1|secp384r1 Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1\n```\n\n## Chat\n\nDehydrated has an official IRC-channel `#dehydrated` on libera.chat that can be used for general discussion and suggestions.\n\nThe channel can also be accessed with Matrix using the official libera.chat bridge at `#dehydrated:libera.chat`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdehydrated-io%2Fdehydrated","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdehydrated-io%2Fdehydrated","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdehydrated-io%2Fdehydrated/lists"}