]> git.proxmox.com Git - mirror_acme.sh.git/blame - README.md
Merge pull request #2047 from Neilpang/dev
[mirror_acme.sh.git] / README.md
CommitLineData
a2e62f8e 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)
319d49dd
TGB
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)
99dc89c0 4- An ACME protocol client written purely in Shell (Unix shell) language.
1bb90298 5- Full ACME protocol implementation.
79a2bed6 6- Support ACME v1 and ACME v2
7- Support ACME v2 wildcard certs
1bb90298
AL
8- Simple, powerful and very easy to use. You only need 3 minutes to learn it.
9- Bash, dash and sh compatible.
2b45dba5 10- Simplest shell script for Let's Encrypt free certificate client.
1bb90298
AL
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.
1f60d2bb 13- DOES NOT require `root/sudoer` access.
f3b43439 14- Docker friendly
0f48b156 15- IPv6 support
6c0ab5d2 16
9cf65e31 17It's probably the `easiest & smartest` shell script to automatically issue & renew the free certificates from Let's Encrypt.
6c0ab5d2 18
6cc11ffb 19Wiki: https://github.com/Neilpang/acme.sh/wiki
de9fd54e 20
f3b43439 21For Docker Fans: [acme.sh :two_hearts: Docker ](https://github.com/Neilpang/acme.sh/wiki/Run-acme.sh-in-docker)
1bb90298 22
08998032 23Twitter: [@neilpangxa](https://twitter.com/neilpangxa)
24
25
fe04faf6 26# [中文说明](https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E)
27
bae50da7 28# Who:
6f1c72f5 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)
26c669e4 36- [Centminmod](https://centminmod.com/letsencrypt-acmetool-https.html)
6f1c72f5 37- [splynx](https://forum.splynx.com/t/free-ssl-cert-for-splynx-lets-encrypt/297)
7ff52546 38- [archlinux](https://www.archlinux.org/packages/community/any/acme.sh)
9cf65e31 39- [opnsense.org](https://github.com/opnsense/plugins/tree/master/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient)
a5c1c303 40- [CentOS Web Panel](http://centos-webpanel.com/)
41- [lnmp.org](https://lnmp.org/)
63ec05a6 42- [more...](https://github.com/Neilpang/acme.sh/wiki/Blogs-and-tutorials)
1bb90298
AL
43
44# Tested OS
45
daf56504 46| NO | Status| Platform|
47|----|-------|---------|
620f8613 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
990d46d6 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)
620f8613 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
63c6a3b0 61|14|-----| Cloud Linux https://github.com/Neilpang/le/issues/111
620f8613 62|15|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/openbsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|OpenBSD
199067e8 63|16|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/mageia.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Mageia
3ad08e95 64|17|-----| OpenWRT: Tested and working. See [wiki page](https://github.com/Neilpang/acme.sh/wiki/How-to-run-on-OpenWRT)
527dd31c 65|18|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/solaris.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|SunOS/Solaris
5961d443 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
b28a3db3 67|20|[![Build Status](https://travis-ci.org/Neilpang/acme.sh.svg?branch=master)](https://travis-ci.org/Neilpang/acme.sh)|Mac OSX
6c0ab5d2 68
aa66dfff 69For all build statuses, check our [weekly build project](https://github.com/Neilpang/acmetest):
6c0ab5d2 70
6cc11ffb 71https://github.com/Neilpang/acmetest
07f4ec4f 72
c4094c68 73# Supported CA
74
75- Letsencrypt.org CA(default)
76- [BuyPass.com CA](https://github.com/Neilpang/acme.sh/wiki/BuyPass.com-CA)
2b45dba5 77
1bb90298 78# Supported modes
2c75b3fd 79
1bb90298
AL
80- Webroot mode
81- Standalone mode
c9baca79 82- Standalone tls-alpn mode
1bb90298 83- Apache mode
d5865989 84- Nginx mode
1bb90298 85- DNS mode
875625b1 86- [DNS alias mode](https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode)
7c488b59 87- [Stateless mode](https://github.com/Neilpang/acme.sh/wiki/Stateless-Mode)
2b45dba5 88
e8cce73a 89
df1c9d88 90# 1. How to install
6c0ab5d2 91
1bb90298 92### 1. Install online
6c0ab5d2 93
5bdad844 94Check this project: https://github.com/Neilpang/get.acme.sh
b0515cf8 95
2b45dba5 96```bash
99dc89c0 97curl https://get.acme.sh | sh
90dda23f 98```
99
100Or:
2b45dba5
SF
101
102```bash
99dc89c0 103wget -O - https://get.acme.sh | sh
90dda23f 104```
105
106
1bb90298 107### 2. Or, Install from git
2b45dba5 108
1bb90298 109Clone this project and launch installation:
2b45dba5
SF
110
111```bash
6cc11ffb 112git clone https://github.com/Neilpang/acme.sh.git
2b45dba5 113cd ./acme.sh
6cc11ffb 114./acme.sh --install
6c0ab5d2 115```
90dda23f 116
2b45dba5
SF
117You `don't have to be root` then, although `it is recommended`.
118
1bb90298 119Advanced Installation: https://github.com/Neilpang/acme.sh/wiki/How-to-install
d9ded9f3 120
2b45dba5 121The installer will perform 3 actions:
7a894c4c 122
1bb90298
AL
1231. Create and copy `acme.sh` to your home dir (`$HOME`): `~/.acme.sh/`.
124All certs will be placed in this folder too.
1252. Create alias for: `acme.sh=~/.acme.sh/acme.sh`.
1263. Create daily cron job to check and renew the certs if needed.
2b45dba5
SF
127
128Cron entry example:
129
130```bash
1310 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null
132```
acc1e53a 133
1bb90298
AL
134After the installation, you must close the current terminal and reopen it to make the alias take effect.
135
136Ok, you are ready to issue certs now.
acc1e53a 137
6c0ab5d2 138Show help message:
2b45dba5 139
e27dfbb0 140```sh
39c8f79f 141root@v1:~# acme.sh -h
6c0ab5d2 142```
1bb90298
AL
143
144# 2. Just issue a cert
2400e41f 145
2b45dba5 146**Example 1:** Single domain.
2400e41f 147
2b45dba5 148```bash
caa2e45a 149acme.sh --issue -d example.com -w /home/wwwroot/example.com
6c0ab5d2 150```
2b45dba5 151
4c38fec3 152or:
153
154```bash
155acme.sh --issue -d example.com -w /home/username/public_html
156```
157
158or:
159
160```bash
161acme.sh --issue -d example.com -w /var/www/html
162```
163
2b45dba5
SF
164**Example 2:** Multiple domains in the same cert.
165
166```bash
1bb90298 167acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
6c0ab5d2 168```
2400e41f 169
4c38fec3 170The 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.
6c0ab5d2 171
1bb90298
AL
172Second argument **"example.com"** is the main domain you want to issue the cert for.
173You must have at least one domain there.
6c0ab5d2 174
caa2e45a 175You must point and bind all the domains to the same webroot dir: `/home/wwwroot/example.com`.
6c0ab5d2 176
e27dfbb0 177The certs will be placed in `~/.acme.sh/example.com/`
6c0ab5d2 178
e27dfbb0 179The certs will be renewed automatically every **60** days.
6c0ab5d2 180
6cc11ffb 181More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
a63b05a9 182
183
e27dfbb0 184# 3. Install the cert to Apache/Nginx etc.
a63b05a9 185
e27dfbb0 186After the cert is generated, you probably want to install/copy the cert to your Apache/Nginx or other servers.
1bb90298 187You **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.
2b45dba5 188
1bb90298 189**Apache** example:
2b45dba5 190```bash
cd9c3a79 191acme.sh --install-cert -d example.com \
5c539af7 192--cert-file /path/to/certfile/in/apache/cert.pem \
193--key-file /path/to/keyfile/in/apache/key.pem \
194--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
4743171b 195--reloadcmd "service apache2 force-reload"
3c33cdfa 196```
197
1bb90298 198**Nginx** example:
3c33cdfa 199```bash
cd9c3a79 200acme.sh --install-cert -d example.com \
5c539af7 201--key-file /path/to/keyfile/in/nginx/key.pem \
202--fullchain-file /path/to/fullchain/nginx/cert.pem \
4743171b 203--reloadcmd "service nginx force-reload"
6c0ab5d2 204```
7a894c4c 205
a63b05a9 206Only the domain is required, all the other parameters are optional.
207
e27dfbb0 208The ownership and permission info of existing files are preserved. You can pre-create the files to define the ownership and permission.
fe600441 209
e27dfbb0 210Install/copy the cert/key to the production Apache or Nginx path.
1bb90298 211
61852447 212The 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`.
7a894c4c 213
6c0ab5d2 214
58f75313 215**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.**
bae50da7 216
df1c9d88 217# 4. Use Standalone server to issue cert
6c0ab5d2 218
1bb90298 219**(requires you to be root/sudoer or have permission to listen on port 80 (TCP))**
072290f2 220
1bb90298 221Port `80` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again.
2b45dba5
SF
222
223```bash
caa2e45a 224acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com
072290f2
N
225```
226
6cc11ffb 227More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
a63b05a9 228
c9baca79 229# 5. Use Standalone ssl server to issue cert
e22bcf7c 230
c9baca79 231**(requires you to be root/sudoer or have permission to listen on port 443 (TCP))**
232
233Port `443` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again.
234
235```bash
236acme.sh --issue --alpn -d example.com -d www.example.com -d cp.example.com
237```
238
239More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
240
241
242# 6. Use Apache mode
2b45dba5 243
1bb90298 244**(requires you to be root/sudoer, since it is required to interact with Apache server)**
2b45dba5 245
1bb90298 246If you are running a web server, Apache or Nginx, it is recommended to use the `Webroot mode`.
a63b05a9 247
d5865989 248Particularly, 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.
2c75b3fd 249
1bb90298 250Just set string "apache" as the second argument and it will force use of apache plugin automatically.
2c75b3fd 251
e27dfbb0 252```sh
1bb90298 253acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com
2c75b3fd 254```
a63b05a9 255
d5865989 256**This apache mode is only to issue the cert, it will not change your apache config files.
257You will need to configure your website config files to use the cert by yourself.
258We don't want to mess your apache server, don't worry.**
259
6cc11ffb 260More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
2c75b3fd 261
c9baca79 262# 7. Use Nginx mode
1bb90298 263
9d725af6 264**(requires you to be root/sudoer, since it is required to interact with Nginx server)**
265
266If you are running a web server, Apache or Nginx, it is recommended to use the `Webroot mode`.
267
268Particularly, 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.
269
270Just set string "nginx" as the second argument.
271
272It will configure nginx server automatically to verify the domain and then restore the nginx config to the original version.
273
274So, the config is not changed.
275
e27dfbb0 276```sh
9d725af6 277acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
278```
279
c1f52299 280**This nginx mode is only to issue the cert, it will not change your nginx config files.
d5865989 281You will need to configure your website config files to use the cert by yourself.
c1f52299 282We don't want to mess your nginx server, don't worry.**
d5865989 283
9d725af6 284More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
285
c9baca79 286# 8. Automatic DNS API integration
a947dbc6 287
1bb90298 288If your DNS provider supports API access, we can use that API to automatically issue the certs.
6c0ab5d2 289
1bb90298 290You don't have to do anything manually!
ab497961 291
2b45dba5 292### Currently acme.sh supports:
855d9499 293
9c174758 2941. CloudFlare.com API
2951. DNSPod.cn API
2961. CloudXNS.com API
2971. GoDaddy.com API
9c174758 2981. PowerDNS.com API
9bc5f686 2991. OVH, kimsufi, soyoustart and runabove API
3001. nsupdate API
9c174758 3011. LuaDNS.com API
3021. DNSMadeEasy.com API
9bc5f686 3031. AWS Route 53
be39ab32 3041. aliyun.com(阿里云) API
192ede5e 3051. ISPConfig 3.1 API
b2686e5b 3061. Alwaysdata.com API
38f23343 3071. Linode.com API
e6b940e2 3081. FreeDNS (https://freedns.afraid.org/)
edfefb67 3091. cyon.ch
3d6a125b 3101. Domain-Offensive/Resellerinterface/Domainrobot API
fab2d9dc 3111. Gandi LiveDNS API
9c87a589 3121. Knot DNS API
ac690fce 3131. DigitalOcean API (native)
3e9478b5 3141. ClouDNS.net API
4ddafb8e 3151. Infoblox NIOS API (https://www.infoblox.com/)
9cf65e31 3161. VSCALE (https://vscale.io/)
66e38ae6 3171. Dynu API (https://www.dynu.com)
9bc5f686 3181. DNSimple API
5e3a5f62 3191. NS1.com API
1a504118
R
3201. DuckDNS.org API
3211. Name.com API
42b2adc0 3221. Dyn Managed DNS API
ae302ee6 3231. Yandex PDD API (https://pdd.yandex.ru)
8ca45d3d 3241. Hurricane Electric DNS service (https://dns.he.net)
78712245 3251. UnoEuro API (https://www.unoeuro.com/)
f7c346de 3261. INWX (https://www.inwx.de/)
b140e255 3271. Servercow (https://servercow.de)
eb207322 3281. Namesilo (https://www.namesilo.com)
775aae70 3291. InternetX autoDNS API (https://internetx.com)
00781dd4 3301. Azure DNS
a4fc802d 3311. selectel.com(selectel.ru) DNS API
6ca5f3d8 3321. zonomi.com DNS API
84649e9d 3331. DreamHost.com API
2bbc25c1 3341. DirectAdmin API
2ff6f4d3 3351. KingHost (https://www.kinghost.com.br/)
8f5ee989 3361. Zilore (https://zilore.com)
5f9b0675 3371. Loopia.se API
dd72f763 3381. acme-dns (https://github.com/joohoi/acme-dns)
4e05062d 3391. TELE3 (https://www.tele3.cz)
616b0b6b 3401. EUSERV.EU (https://www.euserv.eu)
22cd408e 3411. DNSPod.com API (https://www.dnspod.com)
1d4dec55 3421. Google Cloud DNS API
2e74df25 3431. ConoHa (https://www.conoha.jp)
f3a622d1 3441. netcup DNS API (https://www.netcup.de)
1756bbff 3451. GratisDNS.dk (https://gratisdns.dk)
dc0dd658 3461. Namecheap API (https://www.namecheap.com/)
d55c64c8 3471. MyDNS.JP API (https://www.mydns.jp/)
4162975f 3481. hosting.de (https://www.hosting.de)
fb08b53f 3491. Neodigit.net API (https://www.neodigit.net)
67d3e8d0 3501. Exoscale.com API (https://www.exoscale.com/)
3099c799 3511. PointDNS API (https://pointhq.com/)
2655e726 352
fb08b53f 353And:
9bc5f686 354
a63766a0 355**lexicon DNS API: https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
356 (DigitalOcean, DNSimple, DNSMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.)**
9bc5f686 357
358
1bb90298 359**More APIs coming soon...**
ab497961 360
1bb90298 361If 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.
ab497961 362
1bb90298 363For more details: [How to use DNS API](dnsapi)
ab497961 364
c9baca79 365# 9. Use DNS manual mode:
e27dfbb0 366
46ac97a3 367See: https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode first.
368
d5865989 369If your dns provider doesn't support any api access, you can add the txt record by your hand.
e27dfbb0 370
371```bash
372acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
373```
374
375You should get an output like below:
376
377```sh
378Add the following txt record:
379Domain:_acme-challenge.example.com
380Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
381
382Add the following txt record:
383Domain:_acme-challenge.www.example.com
384Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
385
386Please add those txt records to the domains. Waiting for the dns to take effect.
387```
388
389Then just rerun with `renew` argument:
390
391```bash
392acme.sh --renew -d example.com
393```
394
395Ok, it's done.
396
397**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.**
398
399**Please use dns api mode instead.**
ab497961 400
c9baca79 401# 10. Issue ECC certificates
2b45dba5 402
1bb90298 403`Let's Encrypt` can now issue **ECDSA** certificates.
2b45dba5 404
1bb90298 405And we support them too!
1add47a6 406
d5865989 407Just set the `keylength` parameter with a prefix `ec-`.
2b45dba5 408
1add47a6 409For example:
9e6c4208 410
bcbecff6 411### Single domain ECC certificate
9e6c4208 412
2b45dba5 413```bash
1bb90298 414acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
1add47a6 415```
2b45dba5 416
1bb90298 417### SAN multi domain ECC certificate
2b45dba5
SF
418
419```bash
1bb90298 420acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
9e6c4208
N
421```
422
d5865989 423Please look at the `keylength` parameter above.
1add47a6 424
425Valid values are:
426
2b45dba5
SF
4271. **ec-256 (prime256v1, "ECDSA P-256")**
4282. **ec-384 (secp384r1, "ECDSA P-384")**
4293. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
1add47a6 430
df1c9d88 431
df1c9d88 432
c9baca79 433# 11. Issue Wildcard certificates
df1c9d88 434
e27dfbb0 435It's simple, just give a wildcard domain as the `-d` parameter.
df1c9d88 436
e27dfbb0 437```sh
f2aa5c02 438acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
df1c9d88 439```
e27dfbb0 440
441
442
c9baca79 443# 12. How to renew the certs
e27dfbb0 444
445No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days.
446
447However, you can also force to renew a cert:
448
449```sh
1bb90298 450acme.sh --renew -d example.com --force
df1c9d88 451```
452
453or, for ECC cert:
1bb90298 454
e27dfbb0 455```sh
1bb90298 456acme.sh --renew -d example.com --force --ecc
df1c9d88 457```
458
1bb90298 459
c9baca79 460# 13. How to stop cert renewal
a4964b90 461
e27dfbb0 462To stop renewal of a cert, you can execute the following to remove the cert from the renewal list:
a4964b90 463
e27dfbb0 464```sh
a4964b90
FW
465acme.sh --remove -d example.com [--ecc]
466```
467
e27dfbb0 468The cert/key file is not removed from the disk.
a4964b90 469
e27dfbb0 470You can remove the respective directory (e.g. `~/.acme.sh/example.com`) by yourself.
a4964b90 471
e27dfbb0 472
c9baca79 473# 14. How to upgrade `acme.sh`
1bb90298 474
329174b6 475acme.sh is in constant development, so it's strongly recommended to use the latest code.
df1c9d88 476
477You can update acme.sh to the latest code:
1bb90298 478
e27dfbb0 479```sh
df1c9d88 480acme.sh --upgrade
481```
482
1bb90298
AL
483You can also enable auto upgrade:
484
e27dfbb0 485```sh
1bb90298 486acme.sh --upgrade --auto-upgrade
59649e9b 487```
1bb90298
AL
488
489Then **acme.sh** will be kept up to date automatically.
59649e9b 490
491Disable auto upgrade:
1bb90298 492
e27dfbb0 493```sh
1bb90298 494acme.sh --upgrade --auto-upgrade 0
59649e9b 495```
496
1bb90298 497
c9baca79 498# 15. Issue a cert from an existing CSR
8371b030 499
500https://github.com/Neilpang/acme.sh/wiki/Issue-a-cert-from-existing-CSR
501
502
c9baca79 503# 16. Under the Hood
6c0ab5d2 504
99dc89c0 505Speak ACME language using shell, directly to "Let's Encrypt".
6c0ab5d2
N
506
507TODO:
508
1bb90298 509
c9baca79 510# 17. Acknowledgments
1bb90298 511
63f04675
N
5121. Acme-tiny: https://github.com/diafygi/acme-tiny
5132. ACME protocol: https://github.com/ietf-wg-acme/acme
63f04675 514
1bb90298 515
c9baca79 516# 18. License & Others
6c0ab5d2
N
517
518License is GPLv3
519
1d06c947 520Please Star and Fork me.
6c0ab5d2 521
1bb90298 522[Issues](https://github.com/Neilpang/acme.sh/issues) and [pull requests](https://github.com/Neilpang/acme.sh/pulls) are welcome.
6c0ab5d2
N
523
524
c9baca79 525# 19. Donate
cb6f6229 526Your donation makes **acme.sh** better:
6c0ab5d2 527
43d3b51b 5281. PayPal/Alipay(支付宝)/Wechat(微信): [https://donate.acme.sh/](https://donate.acme.sh/)
529
1bb90298 530[Donate List](https://github.com/Neilpang/acme.sh/wiki/Donate-list)