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