• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.github/H03-Oct-2021-783689

deploy/H03-Oct-2021-3,7202,546

dnsapi/H03-May-2022-23,96717,312

notify/H03-Oct-2021-1,4331,024

DockerfileH A D03-Oct-20211.5 KiB7462

LICENSE.mdH A D03-Oct-202134.3 KiB675553

README.mdH A D03-Oct-202120.6 KiB520329

acme.shH A D03-Oct-2021203.9 KiB7,5896,517

README.md

1# An ACME Shell script: acme.sh
2
3[![FreeBSD](https://github.com/acmesh-official/acme.sh/actions/workflows/FreeBSD.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/FreeBSD.yml)
4[![MacOS](https://github.com/acmesh-official/acme.sh/actions/workflows/MacOS.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/MacOS.yml)
5[![Ubuntu](https://github.com/acmesh-official/acme.sh/actions/workflows/Ubuntu.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Ubuntu.yml)
6[![Windows](https://github.com/acmesh-official/acme.sh/actions/workflows/Windows.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Windows.yml)
7[![Solaris](https://github.com/acmesh-official/acme.sh/actions/workflows/Solaris.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Solaris.yml)
8
9![Shellcheck](https://github.com/acmesh-official/acme.sh/workflows/Shellcheck/badge.svg)
10![PebbleStrict](https://github.com/acmesh-official/acme.sh/workflows/PebbleStrict/badge.svg)
11![DockerHub](https://github.com/acmesh-official/acme.sh/workflows/Build%20DockerHub/badge.svg)
12
13
14<a href="https://opencollective.com/acmesh" alt="Financial Contributors on Open Collective"><img src="https://opencollective.com/acmesh/all/badge.svg?label=financial+contributors" /></a>
15[![Join the chat at https://gitter.im/acme-sh/Lobby](https://badges.gitter.im/acme-sh/Lobby.svg)](https://gitter.im/acme-sh/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
16[![Docker stars](https://img.shields.io/docker/stars/neilpang/acme.sh.svg)](https://hub.docker.com/r/neilpang/acme.sh "Click to view the image on Docker Hub")
17[![Docker pulls](https://img.shields.io/docker/pulls/neilpang/acme.sh.svg)](https://hub.docker.com/r/neilpang/acme.sh "Click to view the image on Docker Hub")
18
19
20
21- An ACME protocol client written purely in Shell (Unix shell) language.
22- Full ACME protocol implementation.
23- Support ECDSA certs
24- Support SAN and wildcard certs
25- Simple, powerful and very easy to use. You only need 3 minutes to learn it.
26- Bash, dash and sh compatible.
27- Purely written in Shell with no dependencies on python.
28- Just one script to issue, renew and install your certificates automatically.
29- DOES NOT require `root/sudoer` access.
30- Docker ready
31- IPv6 ready
32- Cron job notifications for renewal or error etc.
33
34It's probably the `easiest & smartest` shell script to automatically issue & renew the free certificates.
35
36Wiki: https://github.com/acmesh-official/acme.sh/wiki
37
38For Docker Fans: [acme.sh :two_hearts: Docker ](https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker)
39
40Twitter: [@neilpangxa](https://twitter.com/neilpangxa)
41
42
43# [中文说明](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E)
44
45# Who:
46- [FreeBSD.org](https://blog.crashed.org/letsencrypt-in-freebsd-org/)
47- [ruby-china.org](https://ruby-china.org/topics/31983)
48- [Proxmox](https://pve.proxmox.com/wiki/Certificate_Management)
49- [pfsense](https://github.com/pfsense/FreeBSD-ports/pull/89)
50- [webfaction](https://community.webfaction.com/questions/19988/using-letsencrypt)
51- [Loadbalancer.org](https://www.loadbalancer.org/blog/loadbalancer-org-with-lets-encrypt-quick-and-dirty)
52- [discourse.org](https://meta.discourse.org/t/setting-up-lets-encrypt/40709)
53- [Centminmod](https://centminmod.com/letsencrypt-acmetool-https.html)
54- [splynx](https://forum.splynx.com/t/free-ssl-cert-for-splynx-lets-encrypt/297)
55- [archlinux](https://www.archlinux.org/packages/community/any/acme.sh)
56- [opnsense.org](https://github.com/opnsense/plugins/tree/master/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient)
57- [CentOS Web Panel](http://centos-webpanel.com/)
58- [lnmp.org](https://lnmp.org/)
59- [more...](https://github.com/acmesh-official/acme.sh/wiki/Blogs-and-tutorials)
60
61# Tested OS
62
63| NO | Status| Platform|
64|----|-------|---------|
65|1|[![MacOS](https://github.com/acmesh-official/acme.sh/actions/workflows/MacOS.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/MacOS.yml)|Mac OSX
66|2|[![Windows](https://github.com/acmesh-official/acme.sh/actions/workflows/Windows.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Windows.yml)|Windows (cygwin with curl, openssl and crontab included)
67|3|[![FreeBSD](https://github.com/acmesh-official/acme.sh/actions/workflows/FreeBSD.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/FreeBSD.yml)|FreeBSD
68|4|[![Solaris](https://github.com/acmesh-official/acme.sh/actions/workflows/Solaris.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Solaris.yml)|Solaris
69|5|[![Ubuntu](https://github.com/acmesh-official/acme.sh/actions/workflows/Ubuntu.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Ubuntu.yml)| Ubuntu
70|6|NA|pfsense
71|7|NA|OpenBSD
72|8|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)| Debian
73|9|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|CentOS
74|10|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|openSUSE
75|11|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|Alpine Linux (with curl)
76|12|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|Archlinux
77|13|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|fedora
78|14|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|Kali Linux
79|15|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|Oracle Linux
80|16|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|Mageia
81|17|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|Gentoo Linux
82|18|[![Linux](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml/badge.svg)](https://github.com/acmesh-official/acme.sh/actions/workflows/Linux.yml)|ClearLinux
83|19|-----| Cloud Linux  https://github.com/acmesh-official/acme.sh/issues/111
84|20|-----| OpenWRT: Tested and working. See [wiki page](https://github.com/acmesh-official/acme.sh/wiki/How-to-run-on-OpenWRT)
85|21|[![](https://acmesh-official.github.io/acmetest/status/proxmox.svg)](https://github.com/acmesh-official/letest#here-are-the-latest-status)| Proxmox: See Proxmox VE Wiki. Version [4.x, 5.0, 5.1](https://pve.proxmox.com/wiki/HTTPS_Certificate_Configuration_(Version_4.x,_5.0_and_5.1)#Let.27s_Encrypt_using_acme.sh), version [5.2 and up](https://pve.proxmox.com/wiki/Certificate_Management)
86
87
88Check our [testing project](https://github.com/acmesh-official/acmetest):
89
90https://github.com/acmesh-official/acmetest
91
92# Supported CA
93
94- [ZeroSSL.com CA](https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA)(default)
95- Letsencrypt.org CA
96- [BuyPass.com CA](https://github.com/acmesh-official/acme.sh/wiki/BuyPass.com-CA)
97- [SSL.com CA](https://github.com/acmesh-official/acme.sh/wiki/SSL.com-CA)
98- [Pebble strict Mode](https://github.com/letsencrypt/pebble)
99- Any other [RFC8555](https://tools.ietf.org/html/rfc8555)-compliant CA
100
101# Supported modes
102
103- Webroot mode
104- Standalone mode
105- Standalone tls-alpn mode
106- Apache mode
107- Nginx mode
108- DNS mode
109- [DNS alias mode](https://github.com/acmesh-official/acme.sh/wiki/DNS-alias-mode)
110- [Stateless mode](https://github.com/acmesh-official/acme.sh/wiki/Stateless-Mode)
111
112
113# 1. How to install
114
115### 1. Install online
116
117Check this project: https://github.com/acmesh-official/get.acme.sh
118
119```bash
120curl https://get.acme.sh | sh -s email=my@example.com
121```
122
123Or:
124
125```bash
126wget -O -  https://get.acme.sh | sh -s email=my@example.com
127```
128
129
130### 2. Or, Install from git
131
132Clone this project and launch installation:
133
134```bash
135git clone https://github.com/acmesh-official/acme.sh.git
136cd ./acme.sh
137./acme.sh --install -m my@example.com
138```
139
140You `don't have to be root` then, although `it is recommended`.
141
142Advanced Installation: https://github.com/acmesh-official/acme.sh/wiki/How-to-install
143
144The installer will perform 3 actions:
145
1461. Create and copy `acme.sh` to your home dir (`$HOME`): `~/.acme.sh/`.
147All certs will be placed in this folder too.
1482. Create alias for: `acme.sh=~/.acme.sh/acme.sh`.
1493. Create daily cron job to check and renew the certs if needed.
150
151Cron entry example:
152
153```bash
1540 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null
155```
156
157After the installation, you must close the current terminal and reopen it to make the alias take effect.
158
159Ok, you are ready to issue certs now.
160
161Show help message:
162
163```sh
164root@v1:~# acme.sh -h
165```
166
167# 2. Just issue a cert
168
169**Example 1:** Single domain.
170
171```bash
172acme.sh --issue -d example.com -w /home/wwwroot/example.com
173```
174
175or:
176
177```bash
178acme.sh --issue -d example.com -w /home/username/public_html
179```
180
181or:
182
183```bash
184acme.sh --issue -d example.com -w /var/www/html
185```
186
187**Example 2:** Multiple domains in the same cert.
188
189```bash
190acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
191```
192
193The 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.
194
195Second argument **"example.com"** is the main domain you want to issue the cert for.
196You must have at least one domain there.
197
198You must point and bind all the domains to the same webroot dir: `/home/wwwroot/example.com`.
199
200The certs will be placed in `~/.acme.sh/example.com/`
201
202The certs will be renewed automatically every **60** days.
203
204More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
205
206
207# 3. Install the cert to Apache/Nginx etc.
208
209After the cert is generated, you probably want to install/copy the cert to your Apache/Nginx or other servers.
210You **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.
211
212**Apache** example:
213```bash
214acme.sh --install-cert -d example.com \
215--cert-file      /path/to/certfile/in/apache/cert.pem  \
216--key-file       /path/to/keyfile/in/apache/key.pem  \
217--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
218--reloadcmd     "service apache2 force-reload"
219```
220
221**Nginx** example:
222```bash
223acme.sh --install-cert -d example.com \
224--key-file       /path/to/keyfile/in/nginx/key.pem  \
225--fullchain-file /path/to/fullchain/nginx/cert.pem \
226--reloadcmd     "service nginx force-reload"
227```
228
229Only the domain is required, all the other parameters are optional.
230
231The ownership and permission info of existing files are preserved. You can pre-create the files to define the ownership and permission.
232
233Install/copy the cert/key to the production Apache or Nginx path.
234
235The 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`.
236
237
238**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.**
239
240# 4. Use Standalone server to issue cert
241
242**(requires you to be root/sudoer or have permission to listen on port 80 (TCP))**
243
244Port `80` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again.
245
246```bash
247acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com
248```
249
250More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
251
252# 5. Use Standalone ssl server to issue cert
253
254**(requires you to be root/sudoer or have permission to listen on port 443 (TCP))**
255
256Port `443` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again.
257
258```bash
259acme.sh --issue --alpn -d example.com -d www.example.com -d cp.example.com
260```
261
262More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
263
264
265# 6. Use Apache mode
266
267**(requires you to be root/sudoer, since it is required to interact with Apache server)**
268
269If you are running a web server, it is recommended to use the `Webroot mode`.
270
271Particularly, if you are running an Apache server, you can use Apache mode instead. This mode doesn't write any files to your web root folder.
272
273Just set string "apache" as the second argument and it will force use of apache plugin automatically.
274
275```sh
276acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com
277```
278
279**This apache mode is only to issue the cert, it will not change your apache config files.
280You will need to configure your website config files to use the cert by yourself.
281We don't want to mess with your apache server, don't worry.**
282
283More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
284
285# 7. Use Nginx mode
286
287**(requires you to be root/sudoer, since it is required to interact with Nginx server)**
288
289If you are running a web server, it is recommended to use the `Webroot mode`.
290
291Particularly, 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.
292
293Just set string "nginx" as the second argument.
294
295It will configure nginx server automatically to verify the domain and then restore the nginx config to the original version.
296
297So, the config is not changed.
298
299```sh
300acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
301```
302
303**This nginx mode is only to issue the cert, it will not change your nginx config files.
304You will need to configure your website config files to use the cert by yourself.
305We don't want to mess with your nginx server, don't worry.**
306
307More examples: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert
308
309# 8. Automatic DNS API integration
310
311If your DNS provider supports API access, we can use that API to automatically issue the certs.
312
313You don't have to do anything manually!
314
315### Currently acme.sh supports most of the dns providers:
316
317https://github.com/acmesh-official/acme.sh/wiki/dnsapi
318
319# 9. Use DNS manual mode:
320
321See: https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode first.
322
323If your dns provider doesn't support any api access, you can add the txt record by hand.
324
325```bash
326acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
327```
328
329You should get an output like below:
330
331```sh
332Add the following txt record:
333Domain:_acme-challenge.example.com
334Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
335
336Add the following txt record:
337Domain:_acme-challenge.www.example.com
338Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
339
340Please add those txt records to the domains. Waiting for the dns to take effect.
341```
342
343Then just rerun with `renew` argument:
344
345```bash
346acme.sh --renew -d example.com
347```
348
349Ok, it's done.
350
351**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.**
352
353**Please use dns api mode instead.**
354
355# 10. Issue ECC certificates
356
357`Let's Encrypt` can now issue **ECDSA** certificates.
358
359And we support them too!
360
361Just set the `keylength` parameter with a prefix `ec-`.
362
363For example:
364
365### Single domain ECC certificate
366
367```bash
368acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
369```
370
371### SAN multi domain ECC certificate
372
373```bash
374acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
375```
376
377Please look at the `keylength` parameter above.
378
379Valid values are:
380
3811. **ec-256 (prime256v1, "ECDSA P-256")**
3822. **ec-384 (secp384r1,  "ECDSA P-384")**
3833. **ec-521 (secp521r1,  "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
384
385
386
387# 11. Issue Wildcard certificates
388
389It's simple, just give a wildcard domain as the `-d` parameter.
390
391```sh
392acme.sh  --issue -d example.com  -d '*.example.com'  --dns dns_cf
393```
394
395
396
397# 12. How to renew the certs
398
399No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days.
400
401However, you can also force to renew a cert:
402
403```sh
404acme.sh --renew -d example.com --force
405```
406
407or, for ECC cert:
408
409```sh
410acme.sh --renew -d example.com --force --ecc
411```
412
413
414# 13. How to stop cert renewal
415
416To stop renewal of a cert, you can execute the following to remove the cert from the renewal list:
417
418```sh
419acme.sh --remove -d example.com [--ecc]
420```
421
422The cert/key file is not removed from the disk.
423
424You can remove the respective directory (e.g. `~/.acme.sh/example.com`) by yourself.
425
426
427# 14. How to upgrade `acme.sh`
428
429acme.sh is in constant development, so it's strongly recommended to use the latest code.
430
431You can update acme.sh to the latest code:
432
433```sh
434acme.sh --upgrade
435```
436
437You can also enable auto upgrade:
438
439```sh
440acme.sh --upgrade --auto-upgrade
441```
442
443Then **acme.sh** will be kept up to date automatically.
444
445Disable auto upgrade:
446
447```sh
448acme.sh --upgrade --auto-upgrade 0
449```
450
451
452# 15. Issue a cert from an existing CSR
453
454https://github.com/acmesh-official/acme.sh/wiki/Issue-a-cert-from-existing-CSR
455
456
457# 16. Send notifications in cronjob
458
459https://github.com/acmesh-official/acme.sh/wiki/notify
460
461
462# 17. Under the Hood
463
464Speak ACME language using shell, directly to "Let's Encrypt".
465
466TODO:
467
468
469# 18. Acknowledgments
470
4711. Acme-tiny: https://github.com/diafygi/acme-tiny
4722. ACME protocol: https://github.com/ietf-wg-acme/acme
473
474
475## Contributors
476
477### Code Contributors
478
479This project exists thanks to all the people who contribute.
480<a href="https://github.com/acmesh-official/acme.sh/graphs/contributors"><img src="https://opencollective.com/acmesh/contributors.svg?width=890&button=false" /></a>
481
482### Financial Contributors
483
484Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/acmesh/contribute)]
485
486#### Individuals
487
488<a href="https://opencollective.com/acmesh"><img src="https://opencollective.com/acmesh/individuals.svg?width=890"></a>
489
490#### Organizations
491
492Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/acmesh/contribute)]
493
494<a href="https://opencollective.com/acmesh/organization/0/website"><img src="https://opencollective.com/acmesh/organization/0/avatar.svg"></a>
495<a href="https://opencollective.com/acmesh/organization/1/website"><img src="https://opencollective.com/acmesh/organization/1/avatar.svg"></a>
496<a href="https://opencollective.com/acmesh/organization/2/website"><img src="https://opencollective.com/acmesh/organization/2/avatar.svg"></a>
497<a href="https://opencollective.com/acmesh/organization/3/website"><img src="https://opencollective.com/acmesh/organization/3/avatar.svg"></a>
498<a href="https://opencollective.com/acmesh/organization/4/website"><img src="https://opencollective.com/acmesh/organization/4/avatar.svg"></a>
499<a href="https://opencollective.com/acmesh/organization/5/website"><img src="https://opencollective.com/acmesh/organization/5/avatar.svg"></a>
500<a href="https://opencollective.com/acmesh/organization/6/website"><img src="https://opencollective.com/acmesh/organization/6/avatar.svg"></a>
501<a href="https://opencollective.com/acmesh/organization/7/website"><img src="https://opencollective.com/acmesh/organization/7/avatar.svg"></a>
502<a href="https://opencollective.com/acmesh/organization/8/website"><img src="https://opencollective.com/acmesh/organization/8/avatar.svg"></a>
503<a href="https://opencollective.com/acmesh/organization/9/website"><img src="https://opencollective.com/acmesh/organization/9/avatar.svg"></a>
504
505# 19. License & Others
506
507License is GPLv3
508
509Please Star and Fork me.
510
511[Issues](https://github.com/acmesh-official/acme.sh/issues) and [pull requests](https://github.com/acmesh-official/acme.sh/pulls) are welcome.
512
513
514# 20. Donate
515Your donation makes **acme.sh** better:
516
5171. PayPal/Alipay(支付宝)/Wechat(微信): [https://donate.acme.sh/](https://donate.acme.sh/)
518
519[Donate List](https://github.com/acmesh-official/acme.sh/wiki/Donate-list)
520