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