Compare commits

..

142 Commits
2.0.2 ... 2.3.0

Author SHA1 Message Date
neil
61623d22d8 fix bug: re-generate domain key if the key length is different. 2016-07-02 13:03:59 +08:00
neil
bc96082fa9 typos 2016-06-27 10:32:51 +08:00
neil
52677b0a88 2.2.9 support --upgrade 2016-06-26 13:30:47 +08:00
neil
e4a1958573 support apache2ctl 2016-06-26 11:49:41 +08:00
neil
523c7682fa minor: add MAX_RENEW 2016-06-26 10:09:51 +08:00
neil
87ab2d9085 minor, add more debug info 2016-06-25 09:40:00 +08:00
neil
687cfcc2b1 minor add error code 2016-06-25 09:29:23 +08:00
neil
c8e9a31ee5 add --nocron, for not installing default cronjob. 2016-06-24 22:27:22 +08:00
bruncsak
2ce87fe264 bug fix to respect the --accountkeylength flag (#219)
Thanks.
2016-06-23 20:11:43 +08:00
neil
13d7cae9e2 add --insecure Do not check the server certificate, in some devices, the api server's certificate may not be trusted. 2016-06-20 18:35:40 +08:00
neil
8814a348a8 minor, do not write the default user agent. 2016-06-19 14:39:24 +08:00
neil
5aa146a53f fix bug 2016-06-18 12:28:23 +08:00
neil
cc17973113 return the error code in cron 2016-06-18 11:29:28 +08:00
neil
423966a505 minor, add more debug info 2016-06-17 21:35:34 +08:00
neil
fbad6a392d opps 2016-06-17 20:57:54 +08:00
neil
331c4bb669 minor, add more debug info 2016-06-17 20:54:22 +08:00
neil
63a195e5cc minor: fix user-agent string. 2016-06-17 18:09:55 +08:00
neil
e22bcf7cb4 support tls (#215)
* support tls-sni-01
'--tls'  and '--tlsport'

* fix tls doc
2016-06-17 13:23:44 +08:00
neil
869578ce4a minor, fix apache error messaage. 2016-06-15 13:57:27 +08:00
neil
5fc5016d2c minor, fix apache error message. 2016-06-15 13:46:45 +08:00
neil
22e7ba3f7b Merge branch 'master' of https://github.com/Neilpang/acme.sh 2016-06-14 13:08:10 +08:00
neil
dcf4f8f64e minor, format the output of "--list" 2016-06-14 13:07:33 +08:00
neil
d07e8f91c4 Update README.md 2016-06-14 12:00:19 +08:00
neil
054cb72e55 minor, save days only when necessary 2016-06-13 14:49:00 +08:00
neil
0e38c60da3 add "--dnssleep". The time in seconds to wait for all the txt records to take effect in dns api mode. Default 60 seconds. 2016-06-13 10:13:20 +08:00
neil
6d7eda3e8d v2.2.6 Add "--list" command 2016-06-09 14:18:54 +08:00
neil
ee1737a52e minor, ignore empty -d value 2016-06-09 12:45:30 +08:00
neil
432c589722 Merge branch 'master' of https://github.com/Neilpang/acme.sh 2016-06-09 12:07:05 +08:00
neil
c083e078d4 minor, remove unnecessary message 2016-06-09 12:06:37 +08:00
Jeremy Fleischman
9003525210 typo 2016-06-07 13:23:32 +08:00
neil
bf233fbd48 minor 2016-06-07 13:05:27 +08:00
neil
cc7fdbd661 minor, remove the unnecessary error file 2016-06-07 11:27:36 +08:00
neil
199067e8ab add Mageia status 2016-06-05 19:53:22 +08:00
rajcz
d65e3d9a6e typos 2016-06-03 18:12:34 +08:00
neil
ec9fc8cbf7 add more debug message 2016-05-31 21:38:41 +08:00
neil
9aaf36cd0c add curl error message. 2016-05-31 21:20:10 +08:00
neil
c4d8fd83d4 check return code 2016-05-31 20:32:58 +08:00
neil
a272ee4f59 fix get nonce 2016-05-31 20:16:57 +08:00
neil
7012b91f05 add err check for post and get 2016-05-31 12:28:43 +08:00
neil
16679b572f add more debug info 2016-05-31 12:12:30 +08:00
neil
6e18034333 fix error message. 2016-05-30 22:06:30 +08:00
neil
b7ec6789b3 add more log 2016-05-30 21:55:49 +08:00
neil
c835ab025a add more log 2016-05-30 21:28:03 +08:00
neil
39c8f79f3e add '--httpport' for servers that is behind a reverse proxy or load balancer 2016-05-29 14:08:39 +08:00
neil
eae290992f minor, fix normalize json 2016-05-23 22:02:43 +08:00
neil
bb276fc985 minor. 2016-05-23 13:32:50 +08:00
raunsbaekdk
8d5618c44a Bash does not support double equal sign (#192)
use single equal sign '=' instead.
2016-05-21 22:59:39 +08:00
neil
8f63baf7e4 fix centos apache issue 2016-05-21 15:33:10 +08:00
neil
78768e985b minor, add more apache debug info 2016-05-21 14:47:23 +08:00
neil
2ee5d873db fix for the new let's encrypt format 2016-05-21 14:33:40 +08:00
neil
6cd3a8a549 Merge branch 'master' of https://github.com/Neilpang/acme.sh 2016-05-16 22:43:04 +08:00
neil
5778811a18 minor, fix apache version 2016-05-16 22:42:32 +08:00
neil
4e1f39cdec Update README.md 2016-05-14 19:47:03 +08:00
neil
2c554a4bbb minor 2016-05-13 22:25:40 +08:00
neil
8fb9a709b0 fix issue, Wget 1.13.4 doesn't support "--method" 2016-05-13 21:58:29 +08:00
neil
484d9d2ad8 minor 2016-05-13 21:33:52 +08:00
neil
1953957506 minor, polish code 2016-05-13 21:14:00 +08:00
neil
06e8b869b9 Update README.md 2016-05-11 13:27:33 +08:00
neil
8f48168c73 minor 2016-05-10 23:20:50 +08:00
neil
d3595686f6 fix issue. return the actual retcode. 2016-05-09 22:56:19 +08:00
neil
c839b2b039 minor, add comments 2016-05-09 22:36:48 +08:00
neil
acafa585f4 support tcsh 2016-05-09 22:28:45 +08:00
Alistair Nixon
7939b419f7 fix issue where keyauthorization starts with a - character (#184) 2016-05-09 18:18:38 +08:00
neil
61579ec329 Update README.md 2016-05-08 21:47:37 +08:00
neil
1786a5e55a fix issue 2016-05-08 21:21:07 +08:00
neil
2ed01ff040 lexicon dns api: (DigitalOcean, DNSimple, DnsMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.) 2016-05-08 18:29:30 +08:00
root
9bf69d30e0 exec mode 2016-05-08 09:19:17 +08:00
neil
218dc3390f support lexicon dns api 2016-05-08 18:20:56 +08:00
neil
6626371d87 minor. create the csh only when necessary. 2016-05-08 00:44:03 +08:00
neil
a4270efac9 fix wget support in dns api 2016-05-07 23:33:42 +08:00
neil
94dc5f330c install alias for csh 2016-05-07 17:11:01 +08:00
neil
c53da1ef72 fix bug. when the webroot contains 'no' or 'apache' 2016-05-03 20:41:40 +08:00
neil
01f54558b9 fix error message. 2016-04-27 23:34:29 +08:00
neil
ca2a96b3f3 ignore the installcert error for 'issue' 2016-04-27 22:29:35 +08:00
neil
4d2f38b03a minor, just refactor some code. 2016-04-27 22:14:15 +08:00
neil
762978f8d8 remove umask, just chmod for the "$LE_WORKING_DIR" 2016-04-26 08:11:40 +08:00
neil
bfdf1f482e umask 2016-04-25 20:01:37 +08:00
neil
990d46d659 Update README.md 2016-04-25 13:49:02 +08:00
neil
620f86130c Update README.md 2016-04-25 13:48:03 +08:00
neil
c0205b0ad5 Merge branch 'master' of https://github.com/Neilpang/acme.sh 2016-04-24 23:17:08 +08:00
neil
ff3bce3287 minor, remove 'cp -p', for unnecessary warning message for Proxmox. 2016-04-24 23:16:45 +08:00
neil
2b3fc6656c Update README.md 2016-04-24 23:10:54 +08:00
Indust
4fa08fc78c fix record update error for cloudxns (#167)
thanks.
2016-04-24 22:54:40 +08:00
neil
5c5705789e Merge pull request #171 from Neilpang/fix
remove echo -e
2016-04-24 22:19:47 +08:00
neil
ac0a1661f3 remove echo -e 2016-04-24 22:16:03 +08:00
neil
7cde2f8526 Merge pull request #170 from qbi/patch-1
typos
2016-04-24 19:08:06 +08:00
Jens Kubieziel
5bdad8448c Fix some typos 2016-04-24 10:50:09 +00:00
neil
63c6a3b089 Support OpenBSD 2016-04-24 13:57:50 +08:00
neil
230234e701 fix issue for openBSD 2016-04-24 13:51:42 +08:00
neil
e4739512e6 minor, remove kill. the following _get call will cause the nc exit. 2016-04-23 14:03:04 +08:00
neil
14f3dbb71a minor, fix sed_i 2016-04-22 20:50:43 +08:00
neil
0103f59f82 remove unnecessary kill. 2016-04-21 22:48:40 +08:00
neil
d9ded9f3f3 Update README.md 2016-04-21 21:43:28 +08:00
neil
1f60d2bbb4 Update README.md 2016-04-21 21:12:48 +08:00
neil
daf5650445 Update README.md 2016-04-21 21:09:08 +08:00
neil
998c92d57e Update README.md 2016-04-20 22:38:26 +08:00
neil
6de38fbf08 sh 2016-04-19 23:42:10 +08:00
neil
073ca4bf8d support sh 2016-04-19 23:23:52 +08:00
neil
0cca212843 v2.2.2 support sh 2016-04-19 23:17:38 +08:00
neil
c8b6fe62a1 fix compatible for windows nc 2016-04-19 22:01:51 +08:00
neil
f321c3c7ea fix issue for nc on windows. 2016-04-19 21:56:44 +08:00
neil
80a0a7b5c5 minor: fix apachectl error message (#160) 2016-04-19 18:36:15 +08:00
neil
51e85716ee minor: fix apachectl error message 2016-04-19 18:34:04 +08:00
neil
641989fdee NO_DETECT_SH 2016-04-18 22:43:33 +08:00
neil
e4f67c626a Merge pull request #156 from Neilpang/master
merge
2016-04-18 21:36:13 +08:00
neil
db0534ed97 fix bug, uninstall env 2016-04-18 21:33:21 +08:00
Richard van Dijk
2d39b3df88 fix renewAll bug
$CERT_HOME is required by renewAll, but wasn't initialized.
2016-04-18 09:11:05 +08:00
Richard van Dijk
a79b26af6c fix renewAll bug
$CERT_HOME is required by renewAll, but wasn't initialized.
2016-04-18 08:37:35 +08:00
neil
a1048c48e4 fix compatible for dash 2016-04-17 20:58:56 +08:00
neil
fc33dbb54e fix compatible 2016-04-17 20:49:28 +08:00
neil
0a7c936442 modify shebang to bash after install if bash is installed. 2016-04-17 19:47:22 +08:00
neil
c5f2df5c93 fix compatible for sh. head -n -1 is not supported on pfsense. 2016-04-17 19:16:48 +08:00
neil
cada9dc0a0 Merge pull request #154 from Neilpang/master
merge
2016-04-17 18:58:15 +08:00
neil
cbd13a123f Merge branch 'master' of https://github.com/Neilpang/acme.sh 2016-04-17 18:56:10 +08:00
neil
c1c7d87bc5 minor. 2016-04-17 18:56:03 +08:00
neil
f4312b4428 fix 2016-04-17 18:54:06 +08:00
neil
00a506053c compatible to dash 2016-04-17 17:33:08 +08:00
neil
c191ab7c07 Update README.md 2016-04-17 12:02:36 +08:00
neil
8663fb7e64 revert to bash. there are some issue with sh need to fix yet. 2016-04-17 07:38:43 +08:00
neil
99dc89c051 v2.2.0. It's time to declare that we are sh compatible, not only bash. 2016-04-16 23:10:46 +08:00
neil
158f22f733 fix compatible for sh. rename api. '-' is not allowed in the function name. 2016-04-16 22:31:17 +08:00
neil
eccec5f6d5 fix compatible for sh. '-' is not allowed in function name. 2016-04-16 22:19:29 +08:00
neil
dceb3acace fix compatible for sh 2016-04-16 21:52:24 +08:00
neil
036e9d1074 fix compatible for sh 2016-04-16 21:01:40 +08:00
neil
6ed1c718b9 minor, install without dnsapi 2016-04-16 20:06:26 +08:00
neil
8f7ad693a8 fix compatible for sh 2016-04-16 20:02:41 +08:00
neil
eac18b1c99 fix compatible for sh 2016-04-16 19:38:11 +08:00
neil
6f93064114 fix bug: multi webroots 2016-04-16 19:23:44 +08:00
neil
b281789777 add --certhome for --install command to save all the certs. 2016-04-16 19:05:53 +08:00
neil
5ef501c5ec More. restore apache on error 2016-04-16 18:31:00 +08:00
neil
0662507116 add --days only valid for -issue command. 2016-04-16 18:15:36 +08:00
neil
b5eb4b904e add --accountkey and --accountemail 2016-04-16 17:56:45 +08:00
neil
93c9216b69 update doc 2016-04-16 17:27:30 +08:00
neil
635695ec84 add --useragent to specify user-aggent for install or issue or other command 2016-04-16 17:25:26 +08:00
neil
41e3eafa90 skip creating accountkey/domainkey if already existing 2016-04-15 21:27:32 +08:00
neil
937cbf6df8 Update README.md 2016-04-15 20:45:08 +08:00
neil
432c14b86a Merge pull request #143 from sergeifilippov/patch-2
Update dns-myapi.sh
2016-04-15 20:42:27 +08:00
neil
6ce00fcdb8 Merge pull request #141 from sergeifilippov/patch-1
README rewrite
2016-04-15 20:39:27 +08:00
Sergei Filippov
fb67522324 Update dns-myapi.sh 2016-04-15 23:41:15 +12:00
Sergei Filippov
2b45dba57c README rewrite
Refactoring the README.

Cleaned up:

- Spelling
- Grammar
- Formatting

Doing my part to help out the maintainer of this awesome tool! Thank you @neilpang
2016-04-15 22:50:40 +12:00
neil
b0515cf8c0 Install from get.acme.sh 2016-04-14 22:27:51 +08:00
neil
6cc11ffb7d rename to acme.sh 2016-04-14 21:44:26 +08:00
10 changed files with 3230 additions and 2423 deletions

334
README.md
View File

@@ -1,171 +1,150 @@
# le: means simp`Le`
Simplest shell script for LetsEncrypt free Certificate client
# An ACME Shell script: acme.sh
- An ACME protocol client written purely in Shell (Unix shell) language.
- Fully ACME protocol implementation.
- Simple, powerful and very easy to use. You only need 3 minutes to learn.
- Bash, dash and sh compatible.
- Simplest shell script for Let's Encrypt free certificate client.
- Purely written in Shell with no dependencies on python or Let's Encrypt official client.
- Just one script, to issue, renew and install your certificates automatically.
- DOES NOT require `root/sudoer` access.
Simple and Powerful, you only need 3 minutes to learn.
It's probably the `easiest&smallest&smartest` shell script to automatically issue & renew the free certificates from Let's Encrypt.
Pure written in bash, no dependencies to python, acme-tiny or LetsEncrypt official client.
Just one script, to issue, renew your certificates automatically.
Probably it's the smallest&easiest&smartest shell script to automatically issue & renew the free certificates from LetsEncrypt.
NOT require to be `root/sudoer`.
Wiki: https://github.com/Neilpang/le/wiki
Wiki: https://github.com/Neilpang/acme.sh/wiki
#Tested OS
1. Ubuntu [![](https://cdn.rawgit.com/Neilpang/letest/master/status/ubuntu-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
2. Debian [![](https://cdn.rawgit.com/Neilpang/letest/master/status/debian-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
3. CentOS [![](https://cdn.rawgit.com/Neilpang/letest/master/status/centos-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
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)
5. FreeBSD with bash [![](https://cdn.rawgit.com/Neilpang/letest/master/status/freebsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
6. pfsense with bash and curl
7. openSUSE [![](https://cdn.rawgit.com/Neilpang/letest/master/status/opensuse-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
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, curl. https://github.com/Neilpang/le/issues/94)
9. Archlinux [![](https://cdn.rawgit.com/Neilpang/letest/master/status/base-archlinux.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
10. fedora [![](https://cdn.rawgit.com/Neilpang/letest/master/status/fedora-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
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)
12. Oracle Linux [![](https://cdn.rawgit.com/Neilpang/letest/master/status/oraclelinux-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)
13. Cloud Linux https://github.com/Neilpang/le/issues/111
14. Proxmox https://pve.proxmox.com/wiki/HTTPSCertificateConfiguration#Let.27s_Encrypt_using_le.sh
| NO | Status| Platform|
|----|-------|---------|
|1|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/ubuntu-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)| Ubuntu
|2|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/debian-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)| Debian
|3|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/centos-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|CentOS
|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)
|5|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/freebsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|FreeBSD
|6|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/pfsense.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|pfsense
|7|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/opensuse-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|openSUSE
|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)
|9|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/base-archlinux.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Archlinux
|10|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/fedora-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|fedora
|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
|12|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/oraclelinux-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Oracle Linux
|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
|14|-----| Cloud Linux https://github.com/Neilpang/le/issues/111
|15|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/openbsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|OpenBSD
|16|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/mageia.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Mageia
For all build statuses, check our [daily build project](https://github.com/Neilpang/acmetest):
For all the build status, check our daily build project:
https://github.com/Neilpang/acmetest
https://github.com/Neilpang/letest.git
# Supported Mode
#Supported Mode
1. Webroot mode
2. Standalone mode
3. Apache mode
4. Dns mode
#Upgrade from 1.x to 2.x
You can simply uninstall 1.x and re-install 2.x.
2.x is 100% compatible to 1.x. You will feel nothing changed.
# Upgrade from 1.x to 2.x
#How to install
You can simply uninstall 1.x and re-install 2.x.
2.x is 100% compatible to 1.x. You will feel right at home as if nothing has changed.
# le.sh renamed to acme.sh NOW!
All configurations are 100% compatible between `le.sh` and `acme.sh`. You just need to uninstall `le.sh` and re-install `acme.sh` again.
Nothing will be broken during the process.
# How to install
### 1. Install online:
```
curl https://raw.githubusercontent.com/Neilpang/le/master/le.sh | INSTALLONLINE=1 bash
Check this project: https://github.com/Neilpang/get.acme.sh
```bash
curl https://get.acme.sh | sh
```
Or:
```
wget -O - https://raw.githubusercontent.com/Neilpang/le/master/le.sh | INSTALLONLINE=1 bash
```bash
wget -O - https://get.acme.sh | sh
```
### 2. Or, Install from git:
Clone this project:
```
git clone https://github.com/Neilpang/le.git
cd le
./le.sh --install
```bash
git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install
```
You don't have to be root then, although it is recommended.
You `don't have to be root` then, although `it is recommended`.
Which does 3 jobs:
* create and copy `le.sh` to your home dir: `~/.le`
All the certs will be placed in this folder.
* create alias : `le.sh=~/.le/le.sh` and `le=~/.le/le.sh`.
* create everyday cron job to check and renew the cert if needed.
Advanced Installation: https://github.com/Neilpang/acme.sh/wiki/How-to-install
After install, you must close current terminal and reopen again to make the alias take effect.
The installer will perform 3 actions:
1. Create and copy `acme.sh` to your home dir (`$HOME`): `~/.acme.sh/`.
All certs will be placed in this folder.
2. Create alias for: `acme.sh=~/.acme.sh/acme.sh`.
3. Create everyday cron job to check and renew the cert if needed.
Cron entry example:
```bash
0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null
```
After the installation, you must close current terminal and reopen again to make the alias take effect.
Ok, you are ready to issue cert now.
Show help message:
```
root@v1:~# le.sh
https://github.com/Neilpang/le
v2.0.2
Usage: le.sh command ...[parameters]....
Commands:
--help, -h Show this help message.
--version, -v Show version info.
--install Install le.sh to your system.
--uninstall Uninstall le.sh, and uninstall the cron job.
--issue Issue a cert.
--installcert Install the issued cert to apache/nginx or any other server.
--renew, -r Renew a cert.
--renewAll Renew all the certs
--revoke Revoke a cert.
--installcronjob Install the cron job to renew certs, you don't need to call this. The 'install' command can automatically install the cron job.
--uninstallcronjob Uninstall the cron job. The 'uninstall' command can do this automatically.
--cron Run cron job to renew all the certs.
--toPkcs Export the certificate and key to a pfx file.
--createAccountKey, -cak Create an account private key, professional use.
--createDomainKey, -cdk Create an domain private key, professional use.
--createCSR, -ccsr Create CSR , professional use.
Parameters:
--domain, -d domain.tld Specifies a domain, used to issue, renew or revoke etc.
--force, -f Used to force to install or force to renew a cert immediately.
--staging, --test Use staging server, just for test.
--debug Output debug info.
--webroot, -w /path/to/webroot Specifies the web root folder for web root mode.
--standalone Use standalone mode.
--apache Use apache mode.
--dns [dns-cf|dns-dp|dns-cx|/path/to/api/file] Use dns mode or dns api.
--keylength, -k [2048] Specifies the domain key length: 2048, 3072, 4096, 8192 or ec-256, ec-384.
--accountkeylength, -ak [2048] Specifies the account key length.
These parameters are to install the cert to nginx/apache or anyother server after issue/renew a cert:
--certpath /path/to/real/cert/file After issue/renew, the cert will be copied to this path.
--keypath /path/to/real/key/file After issue/renew, the key will be copied to this path.
--capath /path/to/real/ca/file After issue/renew, the intermediate cert will be copied to this path.
--fullchainpath /path/to/fullchain/file After issue/renew, the fullchain cert will be copied to this path.
--reloadcmd "service nginx reload" After issue/renew, it's used to reload the server.
--accountconf Specifies a customized account config file.
--home Specifies the home dir for le.sh
root@v1:~# acme.sh -h
```
# Just issue a cert:
Example 1:
Only one domain:
```
le --issue -d aa.com -w /home/wwwroot/aa.com
**Example 1:** Single domain.
```bash
acme.sh --issue -d aa.com -w /home/wwwroot/aa.com
```
Example 2:
Multiple domains in the same cert:
**Example 2:** Multiple domains in the same cert.
```
le --issue -d aa.com -d www.aa.com -d cp.aa.com -w /home/wwwroot/aa.com
```bash
acme.sh --issue -d aa.com -d www.aa.com -d cp.aa.com -w /home/wwwroot/aa.com
```
The parameter `/home/wwwroot/aa.com` is the web root folder, You must have `write` access to this folder.
The parameter `/home/wwwroot/aa.com` is the web root folder. You **MUST** have `write access` to this folder.
Second argument "aa.com" is the main domain you want to issue cert for.
You must have at least domain there.
Second argument **"aa.com"** is the main domain you want to issue cert for.
You must have at least a domain there.
You must point and bind all the domains to the same webroot dir:`/home/wwwroot/aa.com`
You must point and bind all the domains to the same webroot dir: `/home/wwwroot/aa.com`.
The cert will be placed in `~/.le/aa.com/`
Generate/issued certs will be placed in `~/.acme.sh/aa.com/`
The issued cert will be renewed every 80 days automatically.
More examples: https://github.com/Neilpang/le/wiki/How-to-issue-a-cert
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
# Install issued cert to apache/nginx etc.
After you issue a cert, you probably want to install the cert to your nginx/apache or other servers to use.
```
le --installcert -d aa.com \
After you issue a cert, you probably want to install the cert with your nginx/apache or other servers you may be using.
```bash
acme.sh --installcert -d aa.com \
--certpath /path/to/certfile/in/apache/nginx \
--keypath /path/to/keyfile/in/apache/nginx \
--capath /path/to/ca/certfile/apache/nginx \
@@ -177,43 +156,60 @@ Only the domain is required, all the other parameters are optional.
Install the issued cert/key to the production apache or nginx path.
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`
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`.
# Use Standalone server to issue cert
# Use Standalone server to issue cert
(requires you be root/sudoer, or you have permission to listen tcp 80 port):
Same usage as all above, just give `no` as the webroot.
The tcp `80` port must be free to listen, otherwise you will be prompted to free the `80` port and try again.
**(requires you be root/sudoer, or you have permission to listen tcp 80 port)**
```
le --issue --standalone -d aa.com -d www.aa.com -d cp.aa.com
The tcp `80` port **MUST** be free to listen, otherwise you will be prompted to free the `80` port and try again.
```bash
acme.sh --issue --standalone -d aa.com -d www.aa.com -d cp.aa.com
```
More examples: https://github.com/Neilpang/le/wiki/How-to-issue-a-cert
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
# Use Standalone tls server to issue cert
# Use Apache mode
(requires you 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 can use apache mode instead. Which doesn't write any file to your web root folder.
**(requires you be root/sudoer, or you have permission to listen tcp 443 port)**
Just set string "apache" to the first argument, it will use apache plugin automatically.
acme.sh supports `tls-sni-01` validation.
```
le --issue --apache -d aa.com -d www.aa.com -d user.aa.com
The tcp `443` port **MUST** be free to listen, otherwise you will be prompted to free the `443` port and try again.
```bash
acme.sh --issue --tls -d aa.com -d www.aa.com -d cp.aa.com
```
More examples: https://github.com/Neilpang/le/wiki/How-to-issue-a-cert
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
# Use Apache mode
**(requires you 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.
Just set string "apache" as the second argument, it will force use of apache plugin automatically.
```
acme.sh --issue --apache -d aa.com -d www.aa.com -d user.aa.com
```
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
# Use DNS mode:
Support the dns-01 challenge.
```
le --issue --dns -d aa.com -d www.aa.com -d user.aa.com
Support the `dns-01` challenge.
```bash
acme.sh --issue --dns -d aa.com -d www.aa.com -d user.aa.com
```
You will get the output like bellow:
You should get the output like below:
```
Add the following txt record:
Domain:_acme-challenge.aa.com
@@ -222,86 +218,88 @@ Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
Add the following txt record:
Domain:_acme-challenge.www.aa.com
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
Please add those txt records to the domains. Waiting for the dns to take effect.
Then just retry with 'renew' command:
```
le --renew -d aa.com
Then just rerun with `renew` argument:
```bash
acme.sh --renew -d aa.com
```
Ok, it's finished.
# Automatic DNS API integration
#Automatic dns api integeration
If your DNS provider supports API access, we can use API to automatically issue the certs.
If your dns provider supports api access, we can use api to automatically issue certs.
You don't have do anything manually.
You don't have do anything manually!
###Currently we support:
### Currently acme.sh supports:
1. Cloudflare.com api
2. Dnspod.cn api
3. Cloudxns.com api
4. AWS Route 53, see: https://github.com/Neilpang/le/issues/65
1. Cloudflare.com API
2. Dnspod.cn API
3. Cloudxns.com API
4. AWS Route 53, see: https://github.com/Neilpang/acme.sh/issues/65
5. 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 are coming soon....
##### More APIs are coming soon...
If your dns provider is not in the supported list above, you can write your own script api easily.
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.
For more details: [How to use dns api](dnsapi)
# Issue ECC certificate:
LetsEncrypt now can issue ECDSA certificate.
`Let's Encrypt` now can issue **ECDSA** certificates.
And we also support it.
Just set the `length` parameter with a prefix `ec-`.
For example:
Single domain:
```
le --issue -w /home/wwwroot/aa.com -d aa.com --keylength ec-256
### Single domain ECC cerfiticate:
```bash
acme.sh --issue -w /home/wwwroot/aa.com -d aa.com --keylength ec-256
```
SAN multiple domains:
```
le --issue -w /home/wwwroot/aa.com -d aa.com -d www.aa.com --keylength ec-256
SAN multi domain ECC certificate:
```bash
acme.sh --issue -w /home/wwwroot/aa.com -d aa.com -d www.aa.com --keylength ec-256
```
Please look at the last parameter above.
Valid values are:
1. ec-256 (prime256v1, "ECDSA P-256")
2. ec-384 (secp384r1, "ECDSA P-384")
3. ec-521 (secp521r1, "ECDSA P-521", which is not supported by letsencrypt yet.)
1. **ec-256 (prime256v1, "ECDSA P-256")**
2. **ec-384 (secp384r1, "ECDSA P-384")**
3. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)**
# Under the Hood
#Under the Hood
Speak ACME language with bash directly to Let's encrypt.
Speak ACME language using shell, directly to "Let's Encrypt".
TODO:
#Acknowledgment
# Acknowledgment
1. Acme-tiny: https://github.com/diafygi/acme-tiny
2. ACME protocol: https://github.com/ietf-wg-acme/acme
3. letsencrypt: https://github.com/letsencrypt/letsencrypt
3. Certbot: https://github.com/certbot/certbot
#License & Other
# License & Other
License is GPLv3
Please Star and Fork me.
Issues and pull requests are welcomed.
[Issues](https://github.com/Neilpang/acme.sh/issues) and [pull requests](https://github.com/Neilpang/acme.sh/pulls) are welcomed.

2881
acme.sh Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -15,10 +15,10 @@ export CF_Email="xxxx@sss.com"
Ok, let's issue cert now:
```
le.sh --issue --dns dns-cf -d aa.com -d www.aa.com
acme.sh --issue --dns dns_cf -d aa.com -d www.aa.com
```
The `CF_Key` and `CF_Email` will be saved in `~/.le/account.conf`, when next time you use cloudflare api, it will reuse this key.
The `CF_Key` and `CF_Email` will be saved in `~/.acme.sh/account.conf`, when next time you use cloudflare api, it will reuse this key.
@@ -37,10 +37,10 @@ export DP_Key="sADDsdasdgdsf"
Ok, let's issue cert now:
```
le.sh --issue --dns dns-dp -d aa.com -d www.aa.com
acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com
```
The `DP_Id` and `DP_Key` will be saved in `~/.le/account.conf`, when next time you use dnspod.cn api, it will reuse this key.
The `DP_Id` and `DP_Key` will be saved in `~/.acme.sh/account.conf`, when next time you use dnspod.cn api, it will reuse this key.
## Use Cloudxns.com domain api to automatically issue cert
@@ -58,10 +58,10 @@ export CX_Secret="sADDsdasdgdsf"
Ok, let's issue cert now:
```
le.sh --issue --dns dns-cx -d aa.com -d www.aa.com
acme.sh --issue --dns dns_cx -d aa.com -d www.aa.com
```
The `CX_Key` and `CX_Secret` will be saved in `~/.le/account.conf`, when next time you use Cloudxns.com api, it will reuse this key.
The `CX_Key` and `CX_Secret` will be saved in `~/.acme.sh/account.conf`, when next time you use Cloudxns.com api, it will reuse this key.
@@ -71,16 +71,20 @@ If your api is not supported yet, you can write your own dns api.
Let's assume you want to name it 'myapi',
1. Create a bash script named `~/.le/dns-myapi.sh`,
2. In the scrypt, you must have a function named `dns-myapi-add()`. Which will be called by le.sh to add dns records.
1. Create a bash script named `~/.acme.sh/dns_myapi.sh`,
2. In the scrypt, you must have a function named `dns_myapi_add()`. Which will be called by acme.sh to add dns records.
3. Then you can use your api to issue cert like:
```
le.sh --issue --dns dns-myapi -d aa.com -d www.aa.com
acme.sh --issue --dns dns_myapi -d aa.com -d www.aa.com
```
For more details, please check our sample script: [dns-myapi.sh](dns-myapi.sh)
For more details, please check our sample script: [dns_myapi.sh](dns_myapi.sh)
# Use lexicon dns api
https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api

View File

@@ -1,62 +0,0 @@
#!/bin/bash
#Here is a sample custom api script.
#This file name is "dns-myapi.sh"
#So, here must be a method dns-myapi-add()
#Which will be called by le.sh to add the txt record to your api system.
#returns 0 meanst success, otherwise error.
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns-myapi-add() {
fulldomain=$1
txtvalue=$2
_err "Not implemented!"
return 1;
}
#################### Private functions bellow ##################################
_info() {
if [[ -z "$2" ]] ; then
echo "[$(date)] $1"
else
echo "[$(date)] $1"="'$2'"
fi
}
_err() {
_info "$@" >&2
return 1
}
_debug() {
if [[ -z "$DEBUG" ]] ; then
return
fi
_err "$@"
return 0
}
_debug2() {
if [[ "$DEBUG" -ge "2" ]] ; then
_debug "$@"
fi
return
}
#################### Private functions bellow ##################################

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env sh
#
@@ -7,12 +7,12 @@
#CF_Email="xxxx@sss.com"
CF_Api="https://api.cloudflare.com/client/v4/"
CF_Api="https://api.cloudflare.com/client/v4"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns-cf-add() {
dns_cf_add(){
fulldomain=$1
txtvalue=$2
@@ -36,18 +36,18 @@ dns-cf-add() {
_debug _domain "$_domain"
_debug "Getting txt records"
_cf_rest GET "/zones/${_domain_id}/dns_records?type=TXT&name=$fulldomain"
_cf_rest GET "zones/${_domain_id}/dns_records?type=TXT&name=$fulldomain"
if [ "$?" != "0" ] || ! printf $response | grep \"success\":true > /dev/null ; then
if ! printf "$response" | grep \"success\":true > /dev/null ; then
_err "Error"
return 1
fi
count=$(printf $response | grep -o \"count\":[^,]* | cut -d : -f 2)
if [ "$count" == "0" ] ; then
count=$(printf "$response" | grep -o \"count\":[^,]* | cut -d : -f 2)
_debug count "$count"
if [ "$count" = "0" ] ; then
_info "Adding record"
if _cf_rest POST "/zones/$_domain_id/dns_records" "{\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"ttl\":120}"; then
if _cf_rest POST "zones/$_domain_id/dns_records" "{\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"ttl\":120}"; then
if printf $response | grep $fulldomain > /dev/null ; then
_info "Added, sleeping 10 seconds"
sleep 10
@@ -61,11 +61,11 @@ dns-cf-add() {
_err "Add txt record error."
else
_info "Updating record"
record_id=$(printf $response | grep -o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \")
record_id=$(printf "$response" | grep -o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \"| head -1)
_debug "record_id" $record_id
_cf_rest PUT "/zones/$_domain_id/dns_records/$record_id" "{\"id\":\"$record_id\",\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"zone_id\":\"$_domain_id\",\"zone_name\":\"$_domain\"}"
if [ "$?" == "0" ]; then
_cf_rest PUT "zones/$_domain_id/dns_records/$record_id" "{\"id\":\"$record_id\",\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"zone_id\":\"$_domain_id\",\"zone_name\":\"$_domain\"}"
if [ "$?" = "0" ]; then
_info "Updated, sleeping 10 seconds"
sleep 10
#todo: check if the record takes effect
@@ -102,7 +102,7 @@ _get_root() {
return 1
fi
if printf $response | grep \"name\":\"$h\" ; then
if printf $response | grep \"name\":\"$h\" >/dev/null ; then
_domain_id=$(printf "$response" | grep -o \"id\":\"[^\"]*\" | head -1 | cut -d : -f 2 | tr -d \")
if [ "$_domain_id" ] ; then
_sub_domain=$(printf $domain | cut -d . -f 1-$p)
@@ -112,22 +112,26 @@ _get_root() {
return 1
fi
p=$i
let "i+=1"
i=$(expr $i + 1)
done
return 1
}
_cf_rest() {
m=$1
ep="$2"
data="$3"
_debug $ep
if [ "$3" ] ; then
data="$3"
_H1="X-Auth-Email: $CF_Email"
_H2="X-Auth-Key: $CF_Key"
_H3="Content-Type: application/json"
if [ "$data" ] ; then
_debug data "$data"
response="$(curl --silent -X $m "$CF_Api/$ep" -H "X-Auth-Email: $CF_Email" -H "X-Auth-Key: $CF_Key" -H "Content-Type: application/json" --data $data)"
response="$(_post "$data" "$CF_Api/$ep" "" $m)"
else
response="$(curl --silent -X $m "$CF_Api/$ep" -H "X-Auth-Email: $CF_Email" -H "X-Auth-Key: $CF_Key" -H "Content-Type: application/json")"
response="$(_get "$CF_Api/$ep")"
fi
if [ "$?" != "0" ] ; then

27
dnsapi/dns-cx.sh → dnsapi/dns_cx.sh Normal file → Executable file
View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env sh
# Cloudxns.com Domain api
#
@@ -14,7 +14,7 @@ CX_Api="https://www.cloudxns.net/api2"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns-cx-add() {
dns_cx_add() {
fulldomain=$1
txtvalue=$2
@@ -44,13 +44,13 @@ dns-cx-add() {
return 1
fi
if [ "$count" == "0" ] ; then
if [ "$count" = "0" ] ; then
add_record $_domain $_sub_domain $txtvalue
else
update_record $_domain $_sub_domain $txtvalue
fi
if [ "$?" == "0" ] ; then
if [ "$?" = "0" ] ; then
return 0
fi
return 1
@@ -69,7 +69,7 @@ existing_records() {
return 1
fi
count=0
seg=$(printf "$response" | grep -o "{[^{]*host\":\"$_sub_domain[^}]*}")
seg=$(printf "$response" | grep -o "{[^{]*host\":\"$_sub_domain\"[^}]*}")
_debug seg "$seg"
if [ -z "$seg" ] ; then
return 0
@@ -144,7 +144,7 @@ _get_root() {
return 1;
fi
if printf "$response" | grep "$h." ; then
if printf "$response" | grep "$h." >/dev/null ; then
seg=$(printf "$response" | grep -o "{[^{]*$h\.[^}]*\}" )
_debug seg "$seg"
_domain_id=$(printf "$seg" | grep -o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \")
@@ -159,7 +159,7 @@ _get_root() {
return 1
fi
p=$i
let "i+=1"
i=$(expr $i + 1)
done
return 1
}
@@ -183,11 +183,16 @@ _rest() {
_debug sec "$sec"
hmac=$(printf "$sec"| openssl md5 |cut -d " " -f 2)
_debug hmac "$hmac"
if [ "$3" ] ; then
response="$(curl --silent -X $m "$url" -H "API-KEY: $CX_Key" -H "API-REQUEST-DATE: $cdate" -H "API-HMAC: $hmac" -H 'Content-Type: application/json' -d "$data")"
_H1="API-KEY: $CX_Key"
_H2="API-REQUEST-DATE: $cdate"
_H3="API-HMAC: $hmac"
_H4="Content-Type: application/json"
if [ "$data" ] ; then
response="$(_post "$data" "$url" "" $m)"
else
response="$(curl --silent -X $m "$url" -H "API-KEY: $CX_Key" -H "API-REQUEST-DATE: $cdate" -H "API-HMAC: $hmac" -H 'Content-Type: application/json')"
response="$(_get "$url")"
fi
if [ "$?" != "0" ] ; then

19
dnsapi/dns-dp.sh → dnsapi/dns_dp.sh Normal file → Executable file
View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env sh
# Dnspod.cn Domain api
#
@@ -14,7 +14,7 @@ DP_Api="https://dnsapi.cn"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns-dp-add() {
dns_dp_add() {
fulldomain=$1
txtvalue=$2
@@ -44,7 +44,7 @@ dns-dp-add() {
return 1
fi
if [ "$count" == "0" ] ; then
if [ "$count" = "0" ] ; then
add_record $_domain $_sub_domain $txtvalue
else
update_record $_domain $_sub_domain $txtvalue
@@ -71,7 +71,6 @@ existing_records() {
if printf "$response" | grep "Action completed successful" >/dev/null ; then
count=$(printf "$response" | grep '<type>TXT</type>' | wc -l)
record_id=$(printf "$response" | grep '^<id>' | tail -1 | cut -d '>' -f 2 | cut -d '<' -f 1)
return 0
else
@@ -152,7 +151,7 @@ _get_root() {
return 1
fi
if printf "$response" | grep "Action completed successful" ; then
if printf "$response" | grep "Action completed successful" >/dev/null ; then
_domain_id=$(printf "$response" | grep -o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \")
_debug _domain_id "$_domain_id"
if [ "$_domain_id" ] ; then
@@ -165,7 +164,7 @@ _get_root() {
return 1
fi
p=$i
let "i+=1"
i=$(expr $i + 1)
done
return 1
}
@@ -175,17 +174,17 @@ _get_root() {
_rest() {
m=$1
ep="$2"
data="$3"
_debug $ep
url="$REST_API/$ep"
_debug url "$url"
if [ "$3" ] ; then
data="$3"
if [ "$data" ] ; then
_debug2 data "$data"
response="$(curl --silent -X $m "$url" -d $data)"
response="$(_post $data "$url")"
else
response="$(curl --silent -X $m "$url" )"
response="$(_get "$url")"
fi
if [ "$?" != "0" ] ; then

69
dnsapi/dns_lexicon.sh Executable file
View File

@@ -0,0 +1,69 @@
#!/usr/bin/env sh
# dns api wrapper of lexicon for acme.sh
lexicon_url="https://github.com/AnalogJ/lexicon"
lexicon_cmd="lexicon"
wiki="https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_lexicon_add() {
fulldomain=$1
txtvalue=$2
domain=$(printf "$fulldomain" | cut -d . -f 2-999)
if ! _exists $lexicon_cmd ; then
_err "Please install $lexicon_cmd first: $wiki"
return 1
fi
if [ -z "$PROVIDER" ] ; then
_err "Please define env PROVIDER first: $wiki"
return 1
fi
_savedomainconf PROVIDER "$PROVIDER"
export PROVIDER
Lx_name=$(echo LEXICON_${PROVIDER}_USERNAME | tr [a-z] [A-Z])
eval Lx_name_v="\$$Lx_name"
_debug "$Lx_name" "$Lx_name_v"
if [ "$Lx_name_v" ] ; then
_saveaccountconf $Lx_name "$Lx_name_v"
export "$Lx_name"
fi
Lx_token=$(echo LEXICON_${PROVIDER}_TOKEN | tr [a-z] [A-Z])
eval Lx_token_v="\$$Lx_token"
_debug "$Lx_token" "$Lx_token_v"
if [ "$Lx_token_v" ] ; then
_saveaccountconf $Lx_token "$Lx_token_v"
export "$Lx_token"
fi
Lx_password=$(echo LEXICON_${PROVIDER}_PASSWORD | tr [a-z] [A-Z])
eval Lx_password_v="\$$Lx_password"
_debug "$Lx_password" "$Lx_password_v"
if [ "$Lx_password_v" ] ; then
_saveaccountconf $Lx_password "$Lx_password_v"
export "$Lx_password"
fi
Lx_domaintoken=$(echo LEXICON_${PROVIDER}_DOMAINTOKEN | tr [a-z] [A-Z])
eval Lx_domaintoken_v="\$$Lx_domaintoken"
_debug "$Lx_domaintoken" "$Lx_domaintoken_v"
if [ "$Lx_domaintoken_v" ] ; then
export "$Lx_domaintoken"
_saveaccountconf $Lx_domaintoken "$Lx_domaintoken_v"
fi
$lexicon_cmd "$PROVIDER" create ${domain} TXT --name="_acme-challenge.${domain}." --content="${txtvalue}"
}

52
dnsapi/dns_myapi.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/usr/bin/env sh
#Here is a sample custom api script.
#This file name is "dns_myapi.sh"
#So, here must be a method dns_myapi_add()
#Which will be called by acme.sh to add the txt record to your api system.
#returns 0 means success, otherwise error.
######## Public functions #####################
#Usage: dns_myapi_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_myapi_add() {
fulldomain=$1
txtvalue=$2
_err "Not implemented!"
return 1;
}
#################### Private functions bellow ##################################
_info() {
if [ -z "$2" ] ; then
echo "[$(date)] $1"
else
echo "[$(date)] $1='$2'"
fi
}
_err() {
_info "$@" >&2
return 1
}
_debug() {
if [ -z "$DEBUG" ] ; then
return
fi
_err "$@"
return 0
}
_debug2() {
if [ "$DEBUG" ] && [ "$DEBUG" -ge "2" ] ; then
_debug "$@"
fi
return
}

2143
le.sh

File diff suppressed because it is too large Load Diff