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