# An ACME Shell script: acme.sh [](https://travis-ci.org/Neilpang/acme.sh)
Skip to content
Pull requests
Issues
Marketplace
Explore
@stilez
Learn Git and GitHub without any code!
<ahref="https://opencollective.com/acmesh"alt="Financial Contributors on Open Collective"><imgsrc="https://opencollective.com/acmesh/all/badge.svg?label=financial+contributors"/></a>[](https://gitter.im/acme-sh/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
- An ACME protocol client written purely in Shell (Unix shell) language.
- Full ACME protocol implementation.
- Support ACME v1 and ACME v2
- Support ACME v2 wildcard certs
- Simple, powerful and very easy to use. You only need 3 minutes to learn it.
- Bash, dash and sh compatible.
- Simplest shell script for Let's Encrypt free certificate client.
- Purely written in Shell with no dependencies on python or the official Let's Encrypt client.
- Just one script to issue, renew and install your certificates automatically.
- DOES NOT require `root/sudoer` access.
- Docker friendly
- IPv6 support
- Cron job notifications for renewal or error etc.
Using the Hello World guide, you’ll start a branch, write comments, and open a pull request.
It's probably the `easiest & smartest` shell script to automatically issue & renew the free certificates from Let's Encrypt.
395
14.7k
Wiki: https://github.com/Neilpang/acme.sh/wiki
1.9k
For Docker Fans: [acme.sh :two_hearts: Docker ](https://github.com/Neilpang/acme.sh/wiki/Run-acme.sh-in-docker)
Neilpang/acme.sh
Code
Issues 415
Pull requests 110
Actions
Projects 0
Wiki
Security
Insights
You’re editing a file in a project you don’t have write access to. Submitting a change to this file will write it to a new branch in your fork stilez/acme.sh, so you can send a pull request.
|4|[](https://github.com/Neilpang/letest#here-are-the-latest-status)|Windows (cygwin with curl, openssl and crontab included)
|8|[](https://github.com/Neilpang/letest#here-are-the-latest-status)|Alpine Linux (with curl)
|11|[](https://github.com/Neilpang/letest#here-are-the-latest-status)|Kali Linux
|12|[](https://github.com/Neilpang/letest#here-are-the-latest-status)|Oracle Linux
|19|[](https://github.com/Neilpang/letest#here-are-the-latest-status)|Gentoo Linux
<ahref="https://opencollective.com/acmesh"alt="Financial Contributors on Open Collective"><imgsrc="https://opencollective.com/acmesh/all/badge.svg?label=financial+contributors"/></a>[](https://gitter.im/acme-sh/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
For all build statuses, check our [weekly build project](https://github.com/Neilpang/acmetest):
4
https://github.com/Neilpang/acmetest
- An ACME protocol client written purely in Shell (Unix shell) language.
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.
27
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/`
28
The certs will be renewed automatically every **60** days.
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
# Who:
# 3. Install the cert to Apache/Nginx etc.
30
After the cert is generated, you probably want to install/copy the cert to your Apache/Nginx or other servers.
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.
32
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.
33
The cert will be renewed every **60** days by default (which is configurable). Once the cert is renewed, the Apache/Nginx service will be reloaded automatically by the command: `service apache2 force-reload` or `service nginx force-reload`.
**Please take care: 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 renewed cert in 60 days.**
Please add those txt records to the domains. Waiting for the dns to take effect.
```
Then just rerun with `renew` argument:
```bash
acme.sh --renew-d example.com
```
Ok, it's done.
**Take care, this is dns manual mode, it can not be renewed automatically. you will have to add a new txt record to your domain by your hand when you renew your cert.**
**Please use dns api mode instead.**
# 10. Issue ECC certificates
`Let's Encrypt` can now issue **ECDSA** certificates.
And we support them too!
Just set the `keylength` parameter with a prefix `ec-`.
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/acmesh/contribute)]