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