TopGit tracks acmesh-official/acme.sh on GitHub as part of the Automation family. The project has 47.4k stars. A pure Unix shell script ACME client for SSL / TLS certificate automation
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
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.
Only the domain is required, all the other parameters are optional.
The ownership and permission info of existing files are preserved. You can pre-create the files to define the ownership and permission.
Install/copy the cert/key to the production Apache or Nginx path.
🔄 The cert will be renewed every 30 days by default (configurable). Once renewed, the Apache/Nginx service will be reloaded automatically.
⚠️ IMPORTANT: The reloadcmd is very important. The cert can be automatically renewed, but without a correct reloadcmd, the cert may not be flushed to your server (like nginx or apache), then your website will not be able to show the renewed cert.
4️⃣ Use Standalone Server to Issue Certificate
🔐 Requires root/sudoer or permission to listen on port 80 (TCP)
⚠️ Port 80 (TCP) MUST be free to listen on, otherwise you will be prompted to free it and try again.
💡 Note: This Apache mode is only to issue the cert, it will not change your Apache config files. You will need to configure your website config files to use the cert by yourself. We don't want to mess with your Apache server, don't worry!
📚 More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
7️⃣ Use Nginx Mode
🔐 Requires root/sudoer to interact with Nginx server
If you are running a web server, it is recommended to use the Webroot mode.
Particularly, if you are running an Nginx server, you can use Nginx mode instead. This mode doesn't write any files to your web root folder.
It will configure Nginx server automatically to verify the domain and then restore the Nginx config to the original version. So, the config is not changed.
💡 Note: This Nginx mode is only to issue the cert, it will not change your Nginx config files. You will need to configure your website config files to use the cert by yourself. We don't want to mess with your Nginx server, don't worry!
📚 More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
8️⃣ Automatic DNS API Integration
If your DNS provider supports API access, we can use that API to automatically issue the certs.
✨ You don't have to do anything manually!
📚 Currently acme.sh supports most DNS providers: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
Add the following txt record:
Domain:_acme-challenge.example.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
Add the following txt record:
Domain:_acme-challenge.www.example.com
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please add those txt records to the domains. Waiting for the dns to take effect.
Then just rerun with renew argument:
acme.sh --renew -d example.com
✅ Done!
⚠️ WARNING: This is DNS manual mode — it cannot be renewed automatically. You will have to add a new TXT record to your domain manually when you renew your cert. Please use DNS API mode instead.
DNS persist mode lets you place a single, long‑lived _validation-persist TXT record in your zone and reuse it for every subsequent issuance and renewal. There is no per-issuance challenge token, so renewals require no DNS edits — useful when DNS API access is not available but you still want unattended renewals.
Pick the CA (default is your configured default). The account is registered automatically if you have not used this CA before.
--dns-persist-wildcard
Adds policy=wildcard to the record so it also authorizes wildcard / subdomain certs.
--dns-persist-ca-name <name>
Use a specific CA identity domain (e.g. sectigo.com). If omitted, identities are read from the ACME directory's caaIdentities field and one record per identity is printed — you only need to add any one of them.
--dns-persist-days <N>
Adds persistUntil=<unix-timestamp> to the record, set to N days from now. The CA will refuse new validations against the record after that time. Omit for a record with no expiry.
You should get an output like:
TXT persist domain:_validation-persist.example.com
TXT persist value :"letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/123456789"
✍️ Step 2: Add the TXT record to your DNS
Add the printed TXT persist domain / TXT persist value pair as a TXT record at your DNS provider, then wait for it to propagate.
📜 Step 3: Issue the certificate
acme.sh --issue -d example.com --dns-persist
✅ Done! No challenge token is provisioned during issuance — the CA reads the persistent TXT record directly.
🔄 Renewals just work: acme.sh --renew -d example.com (or the cron job) reuses the same TXT record automatically — no further DNS edits needed.
1️⃣1️⃣ Issue Certificates of Different Key Types (ECC or RSA)
Just set the keylength to a valid, supported value.
Valid values for the keylength parameter:
Key Length
Description
ec-256
prime256v1, "ECDSA P-256" ⭐ Default
ec-384
secp384r1, "ECDSA P-384"
ec-521
secp521r1, "ECDSA P-521" ⚠️ Not supported by Let's Encrypt yet
If the CA exposes a renewalInfo endpoint in its ACME directory (Let's Encrypt, ZeroSSL, etc.), acme.sh follows RFC 9773 automatically — no flag needed, no opt-in:
What
When
Why
🔍 Polls suggestedWindow
Every cron run, before deciding to skip
Lets the CA shift the renewal time forward in case of an incident (key compromise, mass revocation, etc.)
🎯 Picks a random renewal time inside the window
Right after a successful issuance/renewal
Disperses renewals across the network so all clients don't hit the CA at the same instant
🔗 Sends replaces=<certID> in newOrder
On renewal
Lets the CA correlate the new order with the certificate it supersedes (RFC 9773 §5)
↩️ Retries without replaces
If the CA rejects with alreadyReplaced or an ARI validation error
Robust against edge cases (e.g. switching CAs, retired issuers)
Renewal trigger logic: the cert is renewed if any one of the following becomes true:
--force is given
The CA's ARI suggestedWindow has started
The cached Le_NextRenewTime has passed (default fallback for CAs without ARI)
You can see the resulting next renewal time (already ARI-picked when applicable) in:
🔧 Speak ACME language using shell, directly to "Let's Encrypt".
1️⃣9️⃣ Acknowledgments
Project
Link
🙏 Acme-tiny
https://github.com/diafygi/acme-tiny
📜 ACME protocol
https://github.com/ietf-wg-acme/acme
👥 Contributors
💻 Code Contributors
This project exists thanks to all the people who contribute.
If you want to become a contributor make sure to read CONTRIBUTING.md.
💰 Financial Contributors
Become a financial contributor and help us sustain our community. [Contribute]
👤 Individuals
🏢 Organizations
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
2️⃣0️⃣ License & Others
📄 License: GPLv3
⭐ Please Star and Fork this project!
🐛 Issues and 🔀 Pull Requests are welcome.
2️⃣1️⃣ Donate
💝 Your donation makes acme.sh better!
Method
Link
PayPal / Alipay(支付宝) / Wechat(微信)
https://donate.acme.sh/
📜 Donate List
2️⃣2️⃣ About This Repository
[!NOTE]
This repository is officially maintained by ZeroSSL as part of our commitment to providing 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.
All donations made through this repository go directly to the original independent maintainer (Neil Pang), not to ZeroSSL.
How active is development on acmesh-official/acme.sh?
The most recent commit recorded on acmesh-official/acme.sh was 6 days ago, based on the GitHub push timestamp. The repository has 5.7k forks — one of the better signals of community interest.
How many stars does acmesh-official/acme.sh have?
acmesh-official/acme.sh has 47.4k GitHub stars — refresh the page for the live number, or check github.com/acmesh-official/acme.sh. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is acmesh-official/acme.sh open source?
Yes — acmesh-official/acme.sh ships under the GPL-3.0 license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/acmesh-official/acme.sh.
What else is in the Automation space?
acmesh-official/acme.sh is tracked by TopGit under the Automation category, alongside 18 GitHub-tagged topics. Trending and Topics pages list peer repositories of comparable stars and language.
What is acmesh-official/acme.sh?
acmesh-official/acme.sh (acmesh-official/acme.sh) is a Shell project on GitHub. From the project's own README: A pure Unix shell script ACME client for SSL / TLS certificate automation
What language is acmesh-official/acme.sh written in?
acmesh-official/acme.sh is written primarily in Shell. GitHub's language field is based on the largest share of bytes in the default branch.
What license does acmesh-official/acme.sh use?
acmesh-official/acme.sh is released under the GPL-3.0 license. Always verify the LICENSE file directly on GitHub for the authoritative terms — license strings can be edited out of sync with a project's actual stance.
Where do I read more about acmesh-official/acme.sh?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/acmesh-official/acme.sh is the definitive source.