]> git.proxmox.com Git - mirror_acme.sh.git/blob - README.md
Merge pull request #4653 from stokito/dns_ovh_runabove
[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 Just set the `keylength` parameter with a prefix `ec-`.
365
366 For example:
367
368 ### Single domain ECC certificate
369
370 ```bash
371 acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
372 ```
373
374 ### SAN multi domain ECC certificate
375
376 ```bash
377 acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
378 ```
379
380 Please look at the `keylength` parameter above.
381
382 Valid values are:
383
384 1. **ec-256 (prime256v1, "ECDSA P-256", which is the default key type)**
385 2. **ec-384 (secp384r1, "ECDSA P-384")**
386 3. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
387 4. **2048 (RSA2048)**
388 5. **3072 (RSA3072)**
389 6. **4096 (RSA4096)**
390
391
392 # 11. Issue Wildcard certificates
393
394 It's simple, just give a wildcard domain as the `-d` parameter.
395
396 ```sh
397 acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
398 ```
399
400
401
402 # 12. How to renew the certs
403
404 No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days.
405
406 However, you can also force to renew a cert:
407
408 ```sh
409 acme.sh --renew -d example.com --force
410 ```
411
412 or, for ECC cert:
413
414 ```sh
415 acme.sh --renew -d example.com --force --ecc
416 ```
417
418
419 # 13. How to stop cert renewal
420
421 To stop renewal of a cert, you can execute the following to remove the cert from the renewal list:
422
423 ```sh
424 acme.sh --remove -d example.com [--ecc]
425 ```
426
427 The cert/key file is not removed from the disk.
428
429 You can remove the respective directory (e.g. `~/.acme.sh/example.com`) by yourself.
430
431
432 # 14. How to upgrade `acme.sh`
433
434 acme.sh is in constant development, so it's strongly recommended to use the latest code.
435
436 You can update acme.sh to the latest code:
437
438 ```sh
439 acme.sh --upgrade
440 ```
441
442 You can also enable auto upgrade:
443
444 ```sh
445 acme.sh --upgrade --auto-upgrade
446 ```
447
448 Then **acme.sh** will be kept up to date automatically.
449
450 Disable auto upgrade:
451
452 ```sh
453 acme.sh --upgrade --auto-upgrade 0
454 ```
455
456
457 # 15. Issue a cert from an existing CSR
458
459 https://github.com/acmesh-official/acme.sh/wiki/Issue-a-cert-from-existing-CSR
460
461
462 # 16. Send notifications in cronjob
463
464 https://github.com/acmesh-official/acme.sh/wiki/notify
465
466
467 # 17. Under the Hood
468
469 Speak ACME language using shell, directly to "Let's Encrypt".
470
471 TODO:
472
473
474 # 18. Acknowledgments
475
476 1. Acme-tiny: https://github.com/diafygi/acme-tiny
477 2. ACME protocol: https://github.com/ietf-wg-acme/acme
478
479
480 ## Contributors
481
482 ### Code Contributors
483
484 This project exists thanks to all the people who contribute.
485 <a href="https://github.com/acmesh-official/acme.sh/graphs/contributors"><img src="https://opencollective.com/acmesh/contributors.svg?width=890&button=false" /></a>
486
487 ### Financial Contributors
488
489 Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/acmesh/contribute)]
490
491 #### Individuals
492
493 <a href="https://opencollective.com/acmesh"><img src="https://opencollective.com/acmesh/individuals.svg?width=890"></a>
494
495 #### Organizations
496
497 Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/acmesh/contribute)]
498
499 <a href="https://opencollective.com/acmesh/organization/0/website"><img src="https://opencollective.com/acmesh/organization/0/avatar.svg"></a>
500 <a href="https://opencollective.com/acmesh/organization/1/website"><img src="https://opencollective.com/acmesh/organization/1/avatar.svg"></a>
501 <a href="https://opencollective.com/acmesh/organization/2/website"><img src="https://opencollective.com/acmesh/organization/2/avatar.svg"></a>
502 <a href="https://opencollective.com/acmesh/organization/3/website"><img src="https://opencollective.com/acmesh/organization/3/avatar.svg"></a>
503 <a href="https://opencollective.com/acmesh/organization/4/website"><img src="https://opencollective.com/acmesh/organization/4/avatar.svg"></a>
504 <a href="https://opencollective.com/acmesh/organization/5/website"><img src="https://opencollective.com/acmesh/organization/5/avatar.svg"></a>
505 <a href="https://opencollective.com/acmesh/organization/6/website"><img src="https://opencollective.com/acmesh/organization/6/avatar.svg"></a>
506 <a href="https://opencollective.com/acmesh/organization/7/website"><img src="https://opencollective.com/acmesh/organization/7/avatar.svg"></a>
507 <a href="https://opencollective.com/acmesh/organization/8/website"><img src="https://opencollective.com/acmesh/organization/8/avatar.svg"></a>
508 <a href="https://opencollective.com/acmesh/organization/9/website"><img src="https://opencollective.com/acmesh/organization/9/avatar.svg"></a>
509
510
511 #### Sponsors
512
513 [![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)
514
515
516 # 19. License & Others
517
518 License is GPLv3
519
520 Please Star and Fork me.
521
522 [Issues](https://github.com/acmesh-official/acme.sh/issues) and [pull requests](https://github.com/acmesh-official/acme.sh/pulls) are welcome.
523
524
525 # 20. Donate
526 Your donation makes **acme.sh** better:
527
528 1. PayPal/Alipay(支付宝)/Wechat(微信): [https://donate.acme.sh/](https://donate.acme.sh/)
529
530 [Donate List](https://github.com/acmesh-official/acme.sh/wiki/Donate-list)