HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
acmesh-official
acme.sh
Shell2016–2026
acmesh-official / acme.sh

acme.sh

A pure Unix shell script ACME client for SSL / TLS certificate automation

66Distinct people
94Mentions
2Explicit recommenders
48KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A pure Unix shell script ACME client for SSL / TLS certificate automation

GitHub

Where it is used

  • OpenWrt — OpenWrt uses acme.sh to provide ACME-based certificate issuance and renewal via its packaged acme-acmesh integration. The distro ships acme.sh so users can obtain HTTPS certificates on OpenWrt systems. Source

What people are saying

It’s “only” 7.1K LoC, but my favorite is the “acme.sh” script which is used to issue and renew certs from Lets Encrypt.…

xyst used a recommendation phrase. 2 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 6:36:16 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year94 dated mentions

Observed mentions: 2016-04-14 15:49:23 UTC to 2026-10-16 10:19:09 UTC.

0510152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments20162017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 10 mentions; 1 submissions, 9 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 16 mentions; 2 submissions, 14 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 12 mentions; 1 submissions, 11 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 10 mentions; 0 submissions, 10 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 7 mentions; 1 submissions, 6 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 12 mentions; 2 submissions, 10 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC110
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC413
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC1019
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC615
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC16214
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC12111
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC10010
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC716
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC12210
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC707
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC909

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
🔐 acme.sh An ACME Protocol Client Written Purely in Shell ✨ Features 🐚 An ACME protocol client written purely in Shell (Unix shell) language 📜 Full ACME protocol implementation 🔑 Support ECDSA certificates 🌐 Support SAN and wildcard certificates ⚡ Simple, powerful and very easy to use — only 3 minutes to learn! 🔧 Compatible with Bash, dash and sh 🚫 No dependencies on Python 🔄 One script to issue, renew and install your certificates automatically 👤 DOES NOT require root/sudoer access 🐳 Docker ready 🌍 IPv6 ready 📧 Cron job notifications for renewal or error 💡 It's probably the easiest & smartest shell script to automatically issue & renew free certificates. 📚 Wiki • 🐳 Docker Guide • 🐦 Twitter 🌏 中文说明 🏆 Who Uses acme.sh? FreeBSD.org ruby-china.org Proxmox pfsense Loadbalancer.org discourse.org Centminmod splynx opnsense.org CentOS Web Panel lnmp.org more... 🖥️ Tested OS NO Status Platform 1 Mac OSX 2 Windows (cygwin with curl, openssl and crontab included) 3 FreeBSD 4 Solaris 5 Ubuntu 6 NA pfsense 7 OpenBSD 8 NetBSD 9 DragonFlyBSD 10 MidnightBSD 11 Omnios 12 OpenIndiana 13 Debian 14 openSUSE 15 Alpine Linux (with curl) 16 Archlinux 17 fedora 18 Kali Linux 19 Oracle Linux 20 Mageia 21 Gentoo Linux 22 ----- Cloud Linux #111 23 ----- OpenWRT: Tested and working. See wiki page 24 Proxmox: See Proxmox VE Wiki. Version 4.x, 5.0, 5.1, version 5.2 and up 25 Haiku OS 26 Tribblix 27 GhostBSD 28 GNU Hurd 29 openEuler 30 HardenedBSD 31 OPNsense 🧪 Check our testing project 🖥️ The testing VMs are supported by vmactions.org 🏛️ Supported CA CA Status ZeroSSL.com CA ⭐ Default Letsencrypt.org CA ✅ Supported SSL.com CA ✅ Supported Google.com Public CA ✅ Supported Actalis.com CA ✅ Supported Pebble strict Mode ✅ Supported Any RFC8555-compliant CA ✅ Supported ⚙️ Supported Modes Mode Description 📁 Webroot mode Use existing webroot directory 🖥️ Standalone mode Built-in webserver on port 80 🔐 Standalone tls-alpn mode Built-in webserver on port 443 🪶 Apache mode Use Apache for verification ⚡ Nginx mode Use Nginx for verification 🌐 DNS mode Use DNS TXT records 🔗 DNS alias mode Use DNS alias for verification 📡 Stateless mode Stateless verification 📌 DNS persist mode Persistent DNS TXT record (draft-ietf-acme-dns-persist-01) 📖 Usage Guide 1️⃣ How to Install 📥 Install Online Check this project: https://github.com/acmesh-official/get.acme.sh curl https://get.acme.sh | sh -s email=my@example.com Or: wget -O - https://get.acme.sh | sh -s email=my@example.com 📦 Install from Git Clone this project and launch installation: git clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh ./acme.sh --install -m my@example.com 💡 You don't have to be root then, although it is recommended. 📚 Advanced Installation: https://github.com/acmesh-official/acme.sh/wiki/How-to-install The installer will perform 3 actions: Create and copy acme.sh to your home dir ($HOME): ~/.acme.sh/. All certs will be placed in this folder too. Create alias for: acme.sh=~/.acme.sh/acme.sh. Create daily cron job to check and renew the certs if needed. Cron entry example: 0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null ⚠️ After the installation, you must close the current terminal and reopen it to make the alias take effect. ✅ You are ready to issue certs now! Show help message: acme.sh -h 🔏 Verify a Release Release tags from 3.1.6 on are signed with the maintainer's SSH key. The signing happens on the maintainer's machine, so the private key is never available to CI. The public half is allowed_signers in this repository. From a clone: git config gpg.ssh.allowedSignersFile allowed_signers git verify-tag 3.1.6 The signature covers the tag object, which pins the commit and therefore the whole tree, so a good signature verifies every file at that release and no separate tarball checksum is needed. Build a tarball from the verified tag: git archive --format=tar.gz --prefix=acme.sh-3.1.6/ 3.1.6 > acme.sh-3.1.6.tar.gz ⚠️ Tags up to 3.1.5 are unsigned. 2️⃣ Issue a Certificate Example 1: Single domain. acme.sh --issue -d example.com -w /home/wwwroot/example.com or: acme.sh --issue -d example.com -w /home/username/public_html or: acme.sh --issue -d example.com -w /var/www/html Example 2: Multiple domains in the same cert. acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com The parameter /home/wwwroot/example.com or /home/username/public_html or /var/www/html is the web root folder where you host your website files. You MUST have write access to this folder. Second argument "example.com" is the main domain you want to issue the cert for. You must have at least one domain there. You must point and bind all the domains to the same webroot dir: /home/wwwroot/example.com. The certs will be placed in ~/.acme.sh/example.com/ 🔄 The certs will be renewed automatically every 30 days. 🔐 The certs will default to ECC certificates. 📚 More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert 3️⃣ Install the Certificate to Apache/Nginx After the cert is generated, you probably want to install/copy the cert to your Apache/Nginx or other servers. ⚠️ IMPORTANT: You MUST use this command to copy the certs to the target files. DO NOT use the certs files in ~/.acme.sh/ folder — they are for internal use only, the folder structure may change in the future. 🪶 Apache Example: acme.sh --install-cert -d example.com \ --cert-file /path/to/certfile/in/apache/cert.pem \ --key-file /path/to/keyfile/in/apache/key.pem \ --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \ --reloadcmd "service apache2 force-reload" ⚡ Nginx Example: acme.sh --install-cert -d example.com \ --key-file /pa
Read the full README on GitHub

What Hacker News says

4 sources

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.