]> git.proxmox.com Git - mirror_acme.sh.git/blob - README.md
add `--accountkey` and `--accountemail`
[mirror_acme.sh.git] / README.md
1 # An ACME Shell script: acme.sh
2 - An ACME protocol client written purely in Bash (Unix shell) language.
3 - Fully ACME protocol implementation.
4 - Simple, powerful and very easy to use. You only need 3 minutes to learn.
5
6 - Simplest shell script for Let's Encrypt free certificate client.
7 - Purely written in Bash with no dependencies on python or Let's Encrypt official client.
8 - Just one script, to issue, renew and install your certificates automatically.
9
10 It's probably the `easiest&smallest&smartest` shell script to automatically issue & renew the free certificates from Let's Encrypt.
11
12 DOES NOT require `root/sudoer` access.
13
14 Wiki: https://github.com/Neilpang/acme.sh/wiki
15
16 #Tested OS
17 1. Ubuntu [![](https://cdn.rawgit.com/Neilpang/letest/master/status/ubuntu-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
18 2. Debian [![](https://cdn.rawgit.com/Neilpang/letest/master/status/debian-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
19 3. CentOS [![](https://cdn.rawgit.com/Neilpang/letest/master/status/centos-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
20 4. Windows (cygwin with curl, openssl and crontab included) [![](https://cdn.rawgit.com/Neilpang/letest/master/status/windows.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
21 5. FreeBSD with bash [![](https://cdn.rawgit.com/Neilpang/letest/master/status/freebsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
22 6. pfsense with bash and curl
23 7. openSUSE [![](https://cdn.rawgit.com/Neilpang/letest/master/status/opensuse-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
24 8. Alpine Linux [![](https://cdn.rawgit.com/Neilpang/letest/master/status/alpine-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status) (with bash and curl)
25 9. Archlinux [![](https://cdn.rawgit.com/Neilpang/letest/master/status/base-archlinux.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
26 10. fedora [![](https://cdn.rawgit.com/Neilpang/letest/master/status/fedora-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
27 11. Kali Linux [![](https://cdn.rawgit.com/Neilpang/letest/master/status/kalilinux-kali-linux-docker.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
28 12. Oracle Linux [![](https://cdn.rawgit.com/Neilpang/letest/master/status/oraclelinux-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
29 13. Cloud Linux https://github.com/Neilpang/le/issues/111
30 14. Proxmox https://pve.proxmox.com/wiki/HTTPSCertificateConfiguration#Let.27s_Encrypt_using_le.sh
31
32
33 For all build statuses, check our [daily build project](https://github.com/Neilpang/acmetest):
34
35 https://github.com/Neilpang/acmetest
36
37 # Supported Mode
38
39 1. Webroot mode
40 2. Standalone mode
41 3. Apache mode
42 4. Dns mode
43
44 # Upgrade from 1.x to 2.x
45
46 You can simply uninstall 1.x and re-install 2.x.
47 2.x is 100% compatible to 1.x. You will feel right at home as if nothing has changed.
48
49 # le.sh renamed to acme.sh NOW!
50
51 All configurations are 100% compatible between `le.sh` and `acme.sh`. You just need to uninstall `le.sh` and re-install `acme.sh` again.
52 Nothing will be broken during the process.
53
54 # How to install
55
56 ### 1. Install online:
57
58 Check this project:https://github.com/Neilpang/get.acme.sh
59
60 ```bash
61 curl https://get.acme.sh | bash
62
63 ```
64
65 Or:
66
67 ```bash
68 wget -O - https://get.acme.sh | bash
69
70 ```
71
72
73 ### 2. Or, Install from git:
74
75 Clone this project:
76
77 ```bash
78 git clone https://github.com/Neilpang/acme.sh.git
79 cd ./acme.sh
80 ./acme.sh --install
81 ```
82
83 You `don't have to be root` then, although `it is recommended`.
84
85 The installer will perform 3 actions:
86
87 1. Create and copy `acme.sh` to your home dir (`$HOME`): `~/.acme.sh/`.
88 All certs will be placed in this folder.
89 2. Create alia for: `acme.sh=~/.acme.sh/acme.sh`.
90 3. Create everyday cron job to check and renew the cert if needed.
91
92 Cron entry example:
93
94 ```bash
95 0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null
96 ```
97
98 After the installation, you must close current terminal and reopen again to make the alias take effect.
99
100 Ok, you are ready to issue cert now.
101 Show help message:
102
103 ```
104 root@v1:~# acme.sh
105 https://github.com/Neilpang/acme.sh
106 v2.1.1
107 Usage: acme.sh command ...[parameters]....
108 Commands:
109 --help, -h Show this help message.
110 --version, -v Show version info.
111 --install Install acme.sh to your system.
112 --uninstall Uninstall acme.sh, and uninstall the cron job.
113 --issue Issue a cert.
114 --installcert Install the issued cert to apache/nginx or any other server.
115 --renew, -r Renew a cert.
116 --renewAll Renew all the certs
117 --revoke Revoke a cert.
118 --installcronjob Install the cron job to renew certs, you don't need to call this. The 'install' command can automatically install the cron job.
119 --uninstallcronjob Uninstall the cron job. The 'uninstall' command can do this automatically.
120 --cron Run cron job to renew all the certs.
121 --toPkcs Export the certificate and key to a pfx file.
122 --createAccountKey, -cak Create an account private key, professional use.
123 --createDomainKey, -cdk Create an domain private key, professional use.
124 --createCSR, -ccsr Create CSR , professional use.
125
126 Parameters:
127 --domain, -d domain.tld Specifies a domain, used to issue, renew or revoke etc.
128 --force, -f Used to force to install or force to renew a cert immediately.
129 --staging, --test Use staging server, just for test.
130 --debug Output debug info.
131
132 --webroot, -w /path/to/webroot Specifies the web root folder for web root mode.
133 --standalone Use standalone mode.
134 --apache Use apache mode.
135 --dns [dns-cf|dns-dp|dns-cx|/path/to/api/file] Use dns mode or dns api.
136
137 --keylength, -k [2048] Specifies the domain key length: 2048, 3072, 4096, 8192 or ec-256, ec-384.
138 --accountkeylength, -ak [2048] Specifies the account key length.
139
140 These parameters are to install the cert to nginx/apache or anyother server after issue/renew a cert:
141
142 --certpath /path/to/real/cert/file After issue/renew, the cert will be copied to this path.
143 --keypath /path/to/real/key/file After issue/renew, the key will be copied to this path.
144 --capath /path/to/real/ca/file After issue/renew, the intermediate cert will be copied to this path.
145 --fullchainpath /path/to/fullchain/file After issue/renew, the fullchain cert will be copied to this path.
146
147 --reloadcmd "service nginx reload" After issue/renew, it's used to reload the server.
148
149 --accountconf Specifies a customized account config file.
150 --home Specifies the home dir for acme.sh .
151 --useragent Specifies the user agent string. it will be saved for future use too.
152 --accountemail Specifies the account email for registering, Only valid for the '--install' command.
153 --accountkey Specifyes the account key path, Only valid for the '--install' command.
154
155 ```
156
157 # Just issue a cert:
158
159 **Example 1:** Single domain.
160
161 ```bash
162 acme.sh --issue -d aa.com -w /home/wwwroot/aa.com
163 ```
164
165 **Example 2:** Multiple domains in the same cert.
166
167 ```bash
168 acme.sh --issue -d aa.com -d www.aa.com -d cp.aa.com -w /home/wwwroot/aa.com
169 ```
170
171 The parameter `/home/wwwroot/aa.com` is the web root folder. You **MUST** have `write access` to this folder.
172
173 Second argument **"aa.com"** is the main domain you want to issue cert for.
174 You must have at least a domain there.
175
176 You must point and bind all the domains to the same webroot dir: `/home/wwwroot/aa.com`.
177
178 Generate/issued certs will be placed in `~/.acme.sh/aa.com/`
179
180 The issued cert will be renewed every 80 days automatically.
181
182 More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
183
184
185 # Install issued cert to apache/nginx etc.
186
187 After you issue a cert, you probably want to install the cert with your nginx/apache or other servers you may be using.
188
189 ```bash
190 acme.sh --installcert -d aa.com \
191 --certpath /path/to/certfile/in/apache/nginx \
192 --keypath /path/to/keyfile/in/apache/nginx \
193 --capath /path/to/ca/certfile/apache/nginx \
194 --fullchainpath path/to/fullchain/certfile/apache/nginx \
195 --reloadcmd "service apache2|nginx reload"
196 ```
197
198 Only the domain is required, all the other parameters are optional.
199
200 Install the issued cert/key to the production apache or nginx path.
201
202 The cert will be `renewed every 80 days by default` (which is configurable). Once the cert is renewed, the apache/nginx will be automatically reloaded by the command: `service apache2 reload` or `service nginx reload`.
203
204 # Use Standalone server to issue cert
205
206 **(requires you be root/sudoer, or you have permission to listen tcp 80 port)**
207
208 Same usage as above, just give `no` as `--webroot` or `-w`.
209
210 The tcp `80` port **MUST** be free to listen, otherwise you will be prompted to free the `80` port and try again.
211
212 ```bash
213 acme.sh --issue --standalone -d aa.com -d www.aa.com -d cp.aa.com
214 ```
215
216 More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
217
218 # Use Apache mode
219
220 **(requires you be root/sudoer, since it is required to interact with apache server)**
221
222 If you are running a web server, apache or nginx, it is recommended to use the `Webroot mode`.
223
224 Particularly, if you are running an apache server, you should use apache mode instead. This mode doesn't write any files to your web root folder.
225
226 Just set string "apache" as the second argument, it will force use of apache plugin automatically.
227
228 ```
229 acme.sh --issue --apache -d aa.com -d www.aa.com -d user.aa.com
230 ```
231
232 More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
233
234 # Use DNS mode:
235
236 Support the `dns-01` challenge.
237
238 ```bash
239 acme.sh --issue --dns -d aa.com -d www.aa.com -d user.aa.com
240 ```
241
242 You should get the output like below:
243
244 ```
245 Add the following txt record:
246 Domain:_acme-challenge.aa.com
247 Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
248
249 Add the following txt record:
250 Domain:_acme-challenge.www.aa.com
251 Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
252
253 Please add those txt records to the domains. Waiting for the dns to take effect.
254
255 ```
256
257 Then just rerun with `renew` argument:
258
259 ```bash
260 acme.sh --renew -d aa.com
261 ```
262
263 Ok, it's finished.
264
265 # Automatic DNS API integration
266
267 If your DNS provider supports API access, we can use API to automatically issue the certs.
268
269 You don't have do anything manually!
270
271 ### Currently acme.sh supports:
272
273 1. Cloudflare.com API
274 2. Dnspod.cn API
275 3. Cloudxns.com API
276 4. AWS Route 53, see: https://github.com/Neilpang/acme.sh/issues/65
277
278 ##### More APIs are coming soon...
279
280 If your DNS provider is not on the supported list above, you can write your own script API easily. If you do please consider submitting a [Pull Request](https://github.com/Neilpang/acme.sh/pulls) and contribute to the project.
281
282 For more details: [How to use dns api](dnsapi)
283
284 # Issue ECC certificate:
285
286 `Let's Encrypt` now can issue **ECDSA** certificates.
287
288 And we also support it.
289
290 Just set the `length` parameter with a prefix `ec-`.
291
292 For example:
293
294 ### Single domain ECC cerfiticate:
295
296 ```bash
297 acme.sh --issue -w /home/wwwroot/aa.com -d aa.com --keylength ec-256
298 ```
299
300 SAN multi domain ECC certificate:
301
302 ```bash
303 acme.sh --issue -w /home/wwwroot/aa.com -d aa.com -d www.aa.com --keylength ec-256
304 ```
305
306 Please look at the last parameter above.
307
308 Valid values are:
309
310 1. **ec-256 (prime256v1, "ECDSA P-256")**
311 2. **ec-384 (secp384r1, "ECDSA P-384")**
312 3. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
313
314 # Under the Hood
315
316 Speak ACME language using bash, directly to "Let's Encrypt".
317
318 TODO:
319
320 # Acknowledgment
321 1. Acme-tiny: https://github.com/diafygi/acme-tiny
322 2. ACME protocol: https://github.com/ietf-wg-acme/acme
323 3. letsencrypt: https://github.com/letsencrypt/letsencrypt
324
325 # License & Other
326
327 License is GPLv3
328
329 Please Star and Fork me.
330
331 [Issues](https://github.com/Neilpang/acme.sh/issues) and [pull requests](https://github.com/Neilpang/acme.sh/pulls) are welcomed.
332
333
334