]> git.proxmox.com Git - mirror_acme.sh.git/blob - README.md
DNS plugin for Danish service gratisdns.dk
[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
330 And:
331
332 **lexicon DNS API: https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
333 (DigitalOcean, DNSimple, DNSMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.)**
334
335
336 **More APIs coming soon...**
337
338 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.
339
340 For more details: [How to use DNS API](dnsapi)
341
342 # 8. Use DNS manual mode:
343
344 See: https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode first.
345
346 If your dns provider doesn't support any api access, you can add the txt record by your hand.
347
348 ```bash
349 acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
350 ```
351
352 You should get an output like below:
353
354 ```sh
355 Add the following txt record:
356 Domain:_acme-challenge.example.com
357 Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
358
359 Add the following txt record:
360 Domain:_acme-challenge.www.example.com
361 Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
362
363 Please add those txt records to the domains. Waiting for the dns to take effect.
364 ```
365
366 Then just rerun with `renew` argument:
367
368 ```bash
369 acme.sh --renew -d example.com
370 ```
371
372 Ok, it's done.
373
374 **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.**
375
376 **Please use dns api mode instead.**
377
378 # 9. Issue ECC certificates
379
380 `Let's Encrypt` can now issue **ECDSA** certificates.
381
382 And we support them too!
383
384 Just set the `keylength` parameter with a prefix `ec-`.
385
386 For example:
387
388 ### Single domain ECC certificate
389
390 ```bash
391 acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
392 ```
393
394 ### SAN multi domain ECC certificate
395
396 ```bash
397 acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
398 ```
399
400 Please look at the `keylength` parameter above.
401
402 Valid values are:
403
404 1. **ec-256 (prime256v1, "ECDSA P-256")**
405 2. **ec-384 (secp384r1, "ECDSA P-384")**
406 3. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
407
408
409
410 # 10. Issue Wildcard certificates
411
412 It's simple, just give a wildcard domain as the `-d` parameter.
413
414 ```sh
415 acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
416 ```
417
418
419
420 # 11. How to renew the certs
421
422 No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days.
423
424 However, you can also force to renew a cert:
425
426 ```sh
427 acme.sh --renew -d example.com --force
428 ```
429
430 or, for ECC cert:
431
432 ```sh
433 acme.sh --renew -d example.com --force --ecc
434 ```
435
436
437 # 12. How to stop cert renewal
438
439 To stop renewal of a cert, you can execute the following to remove the cert from the renewal list:
440
441 ```sh
442 acme.sh --remove -d example.com [--ecc]
443 ```
444
445 The cert/key file is not removed from the disk.
446
447 You can remove the respective directory (e.g. `~/.acme.sh/example.com`) by yourself.
448
449
450 # 13. How to upgrade `acme.sh`
451
452 acme.sh is in constant development, so it's strongly recommended to use the latest code.
453
454 You can update acme.sh to the latest code:
455
456 ```sh
457 acme.sh --upgrade
458 ```
459
460 You can also enable auto upgrade:
461
462 ```sh
463 acme.sh --upgrade --auto-upgrade
464 ```
465
466 Then **acme.sh** will be kept up to date automatically.
467
468 Disable auto upgrade:
469
470 ```sh
471 acme.sh --upgrade --auto-upgrade 0
472 ```
473
474
475 # 14. Issue a cert from an existing CSR
476
477 https://github.com/Neilpang/acme.sh/wiki/Issue-a-cert-from-existing-CSR
478
479
480 # 15. Under the Hood
481
482 Speak ACME language using shell, directly to "Let's Encrypt".
483
484 TODO:
485
486
487 # 16. Acknowledgments
488
489 1. Acme-tiny: https://github.com/diafygi/acme-tiny
490 2. ACME protocol: https://github.com/ietf-wg-acme/acme
491
492
493 # 17. License & Others
494
495 License is GPLv3
496
497 Please Star and Fork me.
498
499 [Issues](https://github.com/Neilpang/acme.sh/issues) and [pull requests](https://github.com/Neilpang/acme.sh/pulls) are welcome.
500
501
502 # 18. Donate
503 Your donation makes **acme.sh** better:
504
505 1. PayPal/Alipay(支付宝)/Wechat(微信): [https://donate.acme.sh/](https://donate.acme.sh/)
506
507 [Donate List](https://github.com/Neilpang/acme.sh/wiki/Donate-list)