|
|
@@ -1,6 +1,10 @@
|
|
|
# An ACME Shell script: acme.sh [](https://travis-ci.org/Neilpang/acme.sh)
|
|
|
+
|
|
|
+[](https://gitter.im/acme-sh/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
|
- An ACME protocol client written purely in Shell (Unix shell) language.
|
|
|
- Full ACME protocol implementation.
|
|
|
+- Support ACME v1 and ACME v2
|
|
|
+- Support ACME v2 wildcard certs
|
|
|
- Simple, powerful and very easy to use. You only need 3 minutes to learn it.
|
|
|
- Bash, dash and sh compatible.
|
|
|
- Simplest shell script for Let's Encrypt free certificate client.
|
|
|
@@ -8,6 +12,7 @@
|
|
|
- Just one script to issue, renew and install your certificates automatically.
|
|
|
- DOES NOT require `root/sudoer` access.
|
|
|
- Docker friendly
|
|
|
+- IPv6 support
|
|
|
|
|
|
It's probably the `easiest & smartest` shell script to automatically issue & renew the free certificates from Let's Encrypt.
|
|
|
|
|
|
@@ -20,7 +25,7 @@ Twitter: [@neilpangxa](https://twitter.com/neilpangxa)
|
|
|
|
|
|
# [中文说明](https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E)
|
|
|
|
|
|
-# Who are using **acme.sh**
|
|
|
+# Who:
|
|
|
- [FreeBSD.org](https://blog.crashed.org/letsencrypt-in-freebsd-org/)
|
|
|
- [ruby-china.org](https://ruby-china.org/topics/31983)
|
|
|
- [Proxmox](https://pve.proxmox.com/wiki/HTTPS_Certificate_Configuration_(Version_4.x_and_newer))
|
|
|
@@ -32,6 +37,8 @@ Twitter: [@neilpangxa](https://twitter.com/neilpangxa)
|
|
|
- [splynx](https://forum.splynx.com/t/free-ssl-cert-for-splynx-lets-encrypt/297)
|
|
|
- [archlinux](https://aur.archlinux.org/packages/acme.sh-git/)
|
|
|
- [opnsense.org](https://github.com/opnsense/plugins/tree/master/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient)
|
|
|
+- [CentOS Web Panel](http://centos-webpanel.com/)
|
|
|
+- [lnmp.org](https://lnmp.org/)
|
|
|
- [more...](https://github.com/Neilpang/acme.sh/wiki/Blogs-and-tutorials)
|
|
|
|
|
|
# Tested OS
|
|
|
@@ -59,7 +66,7 @@ Twitter: [@neilpangxa](https://twitter.com/neilpangxa)
|
|
|
|19|[](https://github.com/Neilpang/letest#here-are-the-latest-status)|Gentoo Linux
|
|
|
|20|[](https://travis-ci.org/Neilpang/acme.sh)|Mac OSX
|
|
|
|
|
|
-For all build statuses, check our [daily build project](https://github.com/Neilpang/acmetest):
|
|
|
+For all build statuses, check our [weekly build project](https://github.com/Neilpang/acmetest):
|
|
|
|
|
|
https://github.com/Neilpang/acmetest
|
|
|
|
|
|
@@ -69,8 +76,9 @@ https://github.com/Neilpang/acmetest
|
|
|
- Webroot mode
|
|
|
- Standalone mode
|
|
|
- Apache mode
|
|
|
-- Nginx mode ( Beta )
|
|
|
+- Nginx mode
|
|
|
- DNS mode
|
|
|
+- [DNS alias mode](https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode)
|
|
|
- [Stateless mode](https://github.com/Neilpang/acme.sh/wiki/Stateless-Mode)
|
|
|
|
|
|
|
|
|
@@ -124,7 +132,7 @@ Ok, you are ready to issue certs now.
|
|
|
|
|
|
Show help message:
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
root@v1:~# acme.sh -h
|
|
|
```
|
|
|
|
|
|
@@ -161,16 +169,16 @@ You must have at least one domain there.
|
|
|
|
|
|
You must point and bind all the domains to the same webroot dir: `/home/wwwroot/example.com`.
|
|
|
|
|
|
-Generated/issued certs will be placed in `~/.acme.sh/example.com/`
|
|
|
+The certs will be placed in `~/.acme.sh/example.com/`
|
|
|
|
|
|
-The issued cert will be renewed automatically every **60** days.
|
|
|
+The certs will be renewed automatically every **60** days.
|
|
|
|
|
|
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
|
|
|
|
|
|
|
|
|
-# 3. Install the issued cert to Apache/Nginx etc.
|
|
|
+# 3. Install the cert to Apache/Nginx etc.
|
|
|
|
|
|
-After you issue a cert, you probably want to install/copy the cert to your Apache/Nginx or other servers.
|
|
|
+After the cert is generated, you probably want to install/copy the cert to your Apache/Nginx or other servers.
|
|
|
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.
|
|
|
|
|
|
**Apache** example:
|
|
|
@@ -192,13 +200,15 @@ acme.sh --install-cert -d example.com \
|
|
|
|
|
|
Only the domain is required, all the other parameters are optional.
|
|
|
|
|
|
-The ownership and permission info of existing files are preserved. You may want to precreate the files to have defined ownership and permission.
|
|
|
+The ownership and permission info of existing files are preserved. You can pre-create the files to define the ownership and permission.
|
|
|
|
|
|
-Install/copy the issued cert/key to the production Apache or Nginx path.
|
|
|
+Install/copy the cert/key to the production Apache or Nginx path.
|
|
|
|
|
|
-The cert will be `renewed every **60** days by default` (which is configurable). Once the cert is renewed, the Apache/Nginx service will be restarted automatically by the command: `service apache2 restart` or `service nginx restart`.
|
|
|
+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`.
|
|
|
|
|
|
|
|
|
+**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.**
|
|
|
+
|
|
|
# 4. Use Standalone server to issue cert
|
|
|
|
|
|
**(requires you to be root/sudoer or have permission to listen on port 80 (TCP))**
|
|
|
@@ -212,38 +222,27 @@ acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com
|
|
|
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
|
|
|
|
|
|
|
|
|
-# 5. Use Standalone TLS server to issue cert
|
|
|
-
|
|
|
-**(requires you to be root/sudoer or have permission to listen on port 443 (TCP))**
|
|
|
-
|
|
|
-acme.sh supports `tls-sni-01` validation.
|
|
|
-
|
|
|
-Port `443` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again.
|
|
|
-
|
|
|
-```bash
|
|
|
-acme.sh --issue --tls -d example.com -d www.example.com -d cp.example.com
|
|
|
-```
|
|
|
-
|
|
|
-More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
|
|
|
-
|
|
|
-
|
|
|
-# 6. Use Apache mode
|
|
|
+# 5. Use Apache mode
|
|
|
|
|
|
**(requires you to be root/sudoer, since it is required to interact with Apache server)**
|
|
|
|
|
|
If you are running a web server, Apache or Nginx, it is recommended to use the `Webroot mode`.
|
|
|
|
|
|
-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.
|
|
|
+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.
|
|
|
|
|
|
Just set string "apache" as the second argument and it will force use of apache plugin automatically.
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com
|
|
|
```
|
|
|
|
|
|
+**This apache mode is only to issue the cert, it will not change your apache config files.
|
|
|
+You will need to configure your website config files to use the cert by yourself.
|
|
|
+We don't want to mess your apache server, don't worry.**
|
|
|
+
|
|
|
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
|
|
|
|
|
|
-# 7. Use Nginx mode
|
|
|
+# 6. Use Nginx mode
|
|
|
|
|
|
**(requires you to be root/sudoer, since it is required to interact with Nginx server)**
|
|
|
|
|
|
@@ -257,44 +256,17 @@ It will configure nginx server automatically to verify the domain and then resto
|
|
|
|
|
|
So, the config is not changed.
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
|
|
|
```
|
|
|
|
|
|
-More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
|
|
|
-
|
|
|
-# 8. Use DNS mode:
|
|
|
-
|
|
|
-Support the `dns-01` challenge.
|
|
|
-
|
|
|
-```bash
|
|
|
-acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
|
|
|
-```
|
|
|
-
|
|
|
-You should get an output like below:
|
|
|
-
|
|
|
-```
|
|
|
-Add the following txt record:
|
|
|
-Domain:_acme-challenge.example.com
|
|
|
-Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
|
|
|
-
|
|
|
-Add the following txt record:
|
|
|
-Domain:_acme-challenge.www.example.com
|
|
|
-Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
-
|
|
|
-Please add those txt records to the domains. Waiting for the dns to take effect.
|
|
|
-```
|
|
|
-
|
|
|
-Then just rerun with `renew` argument:
|
|
|
-
|
|
|
-```bash
|
|
|
-acme.sh --renew -d example.com
|
|
|
-```
|
|
|
-
|
|
|
-Ok, it's finished.
|
|
|
+**This nginx mode is only to issue the cert, it will not change your nginx config files.
|
|
|
+You will need to configure your website config files to use the cert by yourself.
|
|
|
+We don't want to mess your nginx server, don't worry.**
|
|
|
|
|
|
+More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
|
|
|
|
|
|
-# 9. Automatic DNS API integration
|
|
|
+# 7. Automatic DNS API integration
|
|
|
|
|
|
If your DNS provider supports API access, we can use that API to automatically issue the certs.
|
|
|
|
|
|
@@ -304,17 +276,14 @@ You don't have to do anything manually!
|
|
|
|
|
|
1. CloudFlare.com API
|
|
|
1. DNSPod.cn API
|
|
|
-1. DNSimple API
|
|
|
1. CloudXNS.com API
|
|
|
1. GoDaddy.com API
|
|
|
-1. OVH, kimsufi, soyoustart and runabove API
|
|
|
-1. AWS Route 53
|
|
|
1. PowerDNS.com API
|
|
|
-1. lexicon DNS API: https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
|
|
|
- (DigitalOcean, DNSimple, DNSMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.)
|
|
|
+1. OVH, kimsufi, soyoustart and runabove API
|
|
|
+1. nsupdate API
|
|
|
1. LuaDNS.com API
|
|
|
1. DNSMadeEasy.com API
|
|
|
-1. nsupdate API
|
|
|
+1. AWS Route 53
|
|
|
1. aliyun.com(阿里云) API
|
|
|
1. ISPConfig 3.1 API
|
|
|
1. Alwaysdata.com API
|
|
|
@@ -329,6 +298,29 @@ You don't have to do anything manually!
|
|
|
1. Infoblox NIOS API (https://www.infoblox.com/)
|
|
|
1. VSCALE (https://vscale.io/)
|
|
|
1. Dynu API (https://www.dynu.com)
|
|
|
+1. DNSimple API
|
|
|
+1. NS1.com API
|
|
|
+1. DuckDNS.org API
|
|
|
+1. Name.com API
|
|
|
+1. Dyn Managed DNS API
|
|
|
+1. Yandex PDD API (https://pdd.yandex.ru)
|
|
|
+1. Hurricane Electric DNS service (https://dns.he.net)
|
|
|
+1. UnoEuro API (https://www.unoeuro.com/)
|
|
|
+1. INWX (https://www.inwx.de/)
|
|
|
+1. Servercow (https://servercow.de)
|
|
|
+1. Namesilo (https://www.namesilo.com)
|
|
|
+1. InternetX autoDNS API (https://internetx.com)
|
|
|
+1. Azure DNS
|
|
|
+1. selectel.com(selectel.ru) DNS API
|
|
|
+1. zonomi.com DNS API
|
|
|
+1. DreamHost.com API
|
|
|
+1. DirectAdmin API
|
|
|
+
|
|
|
+
|
|
|
+And:
|
|
|
+
|
|
|
+**lexicon DNS API: https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
|
|
|
+ (DigitalOcean, DNSimple, DNSMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.)**
|
|
|
|
|
|
|
|
|
**More APIs coming soon...**
|
|
|
@@ -337,14 +329,47 @@ If your DNS provider is not on the supported list above, you can write your own
|
|
|
|
|
|
For more details: [How to use DNS API](dnsapi)
|
|
|
|
|
|
+# 8. Use DNS manual mode:
|
|
|
+
|
|
|
+If your dns provider doesn't support any api access, you can add the txt record by your hand.
|
|
|
|
|
|
-# 10. Issue ECC certificates
|
|
|
+```bash
|
|
|
+acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
|
|
|
+```
|
|
|
+
|
|
|
+You should get an output like below:
|
|
|
+
|
|
|
+```sh
|
|
|
+Add the following txt record:
|
|
|
+Domain:_acme-challenge.example.com
|
|
|
+Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
|
|
|
+
|
|
|
+Add the following txt record:
|
|
|
+Domain:_acme-challenge.www.example.com
|
|
|
+Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
+
|
|
|
+Please add those txt records to the domains. Waiting for the dns to take effect.
|
|
|
+```
|
|
|
+
|
|
|
+Then just rerun with `renew` argument:
|
|
|
+
|
|
|
+```bash
|
|
|
+acme.sh --renew -d example.com
|
|
|
+```
|
|
|
+
|
|
|
+Ok, it's done.
|
|
|
+
|
|
|
+**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.**
|
|
|
+
|
|
|
+**Please use dns api mode instead.**
|
|
|
+
|
|
|
+# 9. Issue ECC certificates
|
|
|
|
|
|
`Let's Encrypt` can now issue **ECDSA** certificates.
|
|
|
|
|
|
And we support them too!
|
|
|
|
|
|
-Just set the `length` parameter with a prefix `ec-`.
|
|
|
+Just set the `keylength` parameter with a prefix `ec-`.
|
|
|
|
|
|
For example:
|
|
|
|
|
|
@@ -360,7 +385,7 @@ acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
|
|
|
acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
|
|
|
```
|
|
|
|
|
|
-Please look at the last parameter above.
|
|
|
+Please look at the `keylength` parameter above.
|
|
|
|
|
|
Valid values are:
|
|
|
|
|
|
@@ -369,36 +394,60 @@ Valid values are:
|
|
|
3. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
|
|
|
|
|
|
|
|
|
-# 11. How to renew the issued certs
|
|
|
|
|
|
-No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days.
|
|
|
+# 10. Issue Wildcard certificates
|
|
|
|
|
|
-However, you can also force to renew any cert:
|
|
|
+It's simple, just give a wildcard domain as the `-d` parameter.
|
|
|
|
|
|
+```sh
|
|
|
+acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
|
|
|
```
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 11. How to renew the certs
|
|
|
+
|
|
|
+No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days.
|
|
|
+
|
|
|
+However, you can also force to renew a cert:
|
|
|
+
|
|
|
+```sh
|
|
|
acme.sh --renew -d example.com --force
|
|
|
```
|
|
|
|
|
|
or, for ECC cert:
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
acme.sh --renew -d example.com --force --ecc
|
|
|
```
|
|
|
|
|
|
|
|
|
-# 12. How to upgrade `acme.sh`
|
|
|
+# 12. How to stop cert renewal
|
|
|
+
|
|
|
+To stop renewal of a cert, you can execute the following to remove the cert from the renewal list:
|
|
|
+
|
|
|
+```sh
|
|
|
+acme.sh --remove -d example.com [--ecc]
|
|
|
+```
|
|
|
+
|
|
|
+The cert/key file is not removed from the disk.
|
|
|
+
|
|
|
+You can remove the respective directory (e.g. `~/.acme.sh/example.com`) by yourself.
|
|
|
+
|
|
|
+
|
|
|
+# 13. How to upgrade `acme.sh`
|
|
|
|
|
|
acme.sh is in constant development, so it's strongly recommended to use the latest code.
|
|
|
|
|
|
You can update acme.sh to the latest code:
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
acme.sh --upgrade
|
|
|
```
|
|
|
|
|
|
You can also enable auto upgrade:
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
acme.sh --upgrade --auto-upgrade
|
|
|
```
|
|
|
|
|
|
@@ -406,31 +455,30 @@ Then **acme.sh** will be kept up to date automatically.
|
|
|
|
|
|
Disable auto upgrade:
|
|
|
|
|
|
-```
|
|
|
+```sh
|
|
|
acme.sh --upgrade --auto-upgrade 0
|
|
|
```
|
|
|
|
|
|
|
|
|
-# 13. Issue a cert from an existing CSR
|
|
|
+# 14. Issue a cert from an existing CSR
|
|
|
|
|
|
https://github.com/Neilpang/acme.sh/wiki/Issue-a-cert-from-existing-CSR
|
|
|
|
|
|
|
|
|
-# 14. Under the Hood
|
|
|
+# 15. Under the Hood
|
|
|
|
|
|
Speak ACME language using shell, directly to "Let's Encrypt".
|
|
|
|
|
|
TODO:
|
|
|
|
|
|
|
|
|
-# 15. Acknowledgments
|
|
|
+# 16. Acknowledgments
|
|
|
|
|
|
1. Acme-tiny: https://github.com/diafygi/acme-tiny
|
|
|
2. ACME protocol: https://github.com/ietf-wg-acme/acme
|
|
|
-3. Certbot: https://github.com/certbot/certbot
|
|
|
|
|
|
|
|
|
-# 16. License & Others
|
|
|
+# 17. License & Others
|
|
|
|
|
|
License is GPLv3
|
|
|
|
|
|
@@ -439,7 +487,7 @@ Please Star and Fork me.
|
|
|
[Issues](https://github.com/Neilpang/acme.sh/issues) and [pull requests](https://github.com/Neilpang/acme.sh/pulls) are welcome.
|
|
|
|
|
|
|
|
|
-# 17. Donate
|
|
|
+# 18. Donate
|
|
|
Your donation makes **acme.sh** better:
|
|
|
|
|
|
1. PayPal/Alipay(支付宝)/Wechat(微信): [https://donate.acme.sh/](https://donate.acme.sh/)
|