69 Commits

Author SHA1 Message Date
neil
26e3263aec Merge pull request #894 from Neilpang/dev
Dev
2017-06-18 22:16:34 +08:00
neilpang
08b4e1a744 add ACME_NO_COLOR and --no-color not to ouput color text 2017-06-18 22:13:33 +08:00
neil
d68f0999a4 Merge pull request #891 from Neilpang/aix
fix https://github.com/Neilpang/acme.sh/issues/805
2017-06-18 10:19:25 +08:00
neilpang
2c9ed4c565 check invalid subject cn in the csr
fix https://github.com/Neilpang/acme.sh/issues/805
2017-06-18 10:18:20 +08:00
neil
be4f87c760 Merge pull request #890 from Neilpang/dev
fix format
2017-06-18 10:08:10 +08:00
neilpang
b963dadc14 fix format 2017-06-18 10:07:23 +08:00
neil
26e7fd8b80 Merge pull request #889 from Neilpang/dev
fix openssl 1.1.0 for https://github.com/Neilpang/acme.sh/issues/888
2017-06-18 09:56:11 +08:00
neilpang
b9a972bccd fix openssl 1.1.0 for https://github.com/Neilpang/acme.sh/issues/888 2017-06-18 09:52:59 +08:00
neil
bb7b9280d3 Merge pull request #887 from Neilpang/dev
fix cron
2017-06-17 20:50:43 +08:00
neilpang
395fbbfd14 fix cron 2017-06-17 20:49:45 +08:00
neil
896dfe3def Merge pull request #886 from Neilpang/dev
Dev
2017-06-17 17:31:32 +08:00
neil
6c4f33910c Merge pull request #871 from hajhatten/master
Added views to infoblox dnsapi script
2017-06-17 17:30:51 +08:00
Rikard Gynnerstedt
0a301cdd21 added new line at the end of the file 2017-06-17 11:28:49 +02:00
neil
c2b1e38d7f Merge pull request #884 from Neilpang/dev
Dev
2017-06-17 11:41:16 +08:00
neilpang
fcc0aef7f4 start 2.7.2 2017-06-16 22:41:33 +08:00
neil
eaa3de2dce Merge pull request #883 from Neilpang/url
fix https://github.com/Neilpang/acme.sh/issues/881#issuecomment-30902…
2017-06-16 22:38:39 +08:00
neilpang
f3dc5dd12f fix https://github.com/Neilpang/acme.sh/issues/881#issuecomment-309026385 2017-06-16 21:45:14 +08:00
neil
d2f0178fab Merge pull request #879 from Neilpang/dev
add debug message
2017-06-15 22:25:18 +08:00
neilpang
326c386b2e add debug message 2017-06-15 21:44:10 +08:00
neil
6e68c4e2d6 Merge pull request #878 from Neilpang/dev
Dev
2017-06-15 21:28:22 +08:00
neil
a79e96802f Merge pull request #877 from Neilpang/master
sync
2017-06-15 21:27:30 +08:00
neilpang
65b22b493c minor, debug info 2017-06-15 21:26:14 +08:00
Rikard Gynnerstedt
b73f5a4e94 missed one egrep command 2017-06-15 00:16:26 +02:00
Rikard Gynnerstedt
3b74ac841e save Infoblox_View to account config 2017-06-14 23:52:48 +02:00
neil
253bf776b5 Merge pull request #876 from Neilpang/dev
fix https://github.com/Neilpang/acme.sh/issues/874
2017-06-14 23:31:58 +08:00
neilpang
eef4acd07d fix https://github.com/Neilpang/acme.sh/issues/874 2017-06-14 23:25:20 +08:00
Rikard Gynnerstedt
b6f00ea241 changed path to env 2017-06-08 13:35:27 +02:00
Rikard Gynnerstedt
0bd4a4f98f formated for sh instead of bash 2017-06-08 13:34:29 +02:00
Rikard Gynnerstedt
0b52645bb6 added view variable to infoblox integration script 2017-06-08 13:32:05 +02:00
neil
8e845d9f21 make install command respect LE_CONFIG_HOME env 2017-06-06 10:08:09 +08:00
neil
d29aa43ba4 Merge pull request #869 from Neilpang/dev
Dev
2017-06-05 22:59:41 +08:00
neilpang
450efea191 fix format 2017-06-05 22:55:16 +08:00
neilpang
241cfc4342 fix nginx mode issue for multiple entries 2017-06-05 22:29:21 +08:00
neilpang
7c67e3d7e2 fix typo 2017-06-05 22:18:03 +08:00
neilpang
674790a511 add more detect for nginx mode 2017-06-05 22:14:58 +08:00
neil
4e3c82e329 Merge pull request #868 from Neilpang/dev
minor, add debug info
2017-06-05 21:02:38 +08:00
neilpang
df711b0ea2 minor, add debug info 2017-06-04 22:04:43 +08:00
neil
1019fd9a9d Merge pull request #866 from Neilpang/dev
Dev
2017-05-29 18:02:43 +08:00
neilpang
8a420dd853 fix https://github.com/Neilpang/acme.sh/issues/865#issuecomment-304599955 2017-05-29 17:17:14 +08:00
neilpang
f8bcfeb2ab fix xargs issue for freebsd
https://github.com/Neilpang/acme.sh/issues/865#issuecomment-304599955
2017-05-29 17:07:59 +08:00
neil
34e5beda6a Merge pull request #864 from Neilpang/dev
fix doc
2017-05-27 19:29:13 +08:00
neilpang
6185244754 fix doc 2017-05-27 19:28:12 +08:00
neil
60d9509e39 Merge branch 'dev' 2017-05-26 15:02:30 +08:00
neil
ded4469efe fix for openbsd, sed doesn't support I option. 2017-05-26 14:58:52 +08:00
neil
1f95d8eedf Merge pull request #863 from Neilpang/dev
Dev
2017-05-25 21:08:04 +08:00
neilpang
aa66dfff57 fix doc 2017-05-25 21:06:59 +08:00
neil
25263ce40f Merge pull request #862 from Neilpang/master
sync
2017-05-23 20:46:50 +08:00
neil
e85deb54e1 Merge pull request #860 from feld/patch-1
Update README.md
2017-05-23 20:43:33 +08:00
neil
4750fd159e Merge pull request #861 from Neilpang/dev
Dev
2017-05-23 09:15:18 +08:00
Mark Felder
7eea9533e8 Update README.md
Fix usage documentation for dns_nsupdate. The NSUPDATE_KEY env needs to be a path to a file.
2017-05-22 14:53:26 -05:00
neil
ec675b9ad2 Merge pull request #858 from yadutaf/jt-dns-ovh-scoped-credentials
Support OVH credentials scoped to a specific zone
2017-05-22 21:40:15 +08:00
Jean-Tiare Le Bigot
486e77f474 Support OVH credentials scoped to a specific zone
When creating OVH API credentials, one can scope them to a specific subset of routes. Specifically, this allows to limit acme.sh to a specific zone as the zone is part of the URL. This is an important security/safety net feature.
2017-05-22 14:16:08 +02:00
neil
048059ba1f Merge pull request #854 from Neilpang/dev
Dev
2017-05-20 11:28:26 +08:00
neilpang
ed3dda7da9 fix format 2017-05-20 11:15:26 +08:00
neilpang
fa93d68b08 promote performance 2017-05-20 11:02:48 +08:00
neil
4e20d89d9c Merge pull request #851 from Neilpang/dev
fix for performance of _h2b() function
2017-05-17 13:26:54 +08:00
neil
b420ec6cb9 fix for performance of _h2b() function 2017-05-17 13:16:53 +08:00
neil
375f6101e9 Merge pull request #848 from Neilpang/dev
fix https://github.com/Neilpang/acme.sh/issues/844
2017-05-15 20:50:35 +08:00
neil
2844d73dc7 fix https://github.com/Neilpang/acme.sh/issues/844 2017-05-15 20:46:02 +08:00
neil
6c1176f853 Merge pull request #843 from Neilpang/dev
Dev
2017-05-14 10:24:19 +08:00
neilpang
df037db0bb clean cache 2017-05-14 10:15:40 +08:00
neil
949cc7d21b Merge pull request #841 from Neilpang/master
gitter
2017-05-12 13:40:01 +08:00
neil
9244529007 Merge pull request #840 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2017-05-12 13:39:01 +08:00
The Gitter Badger
319d49ddbe Add Gitter badge 2017-05-12 05:37:15 +00:00
neil
96fcfdb6c6 Merge branch 'dev' 2017-05-12 11:30:49 +08:00
neil
d61ef6b49a gandi dns api updated. 2017-05-12 11:27:06 +08:00
neil
804a6c8d47 Merge pull request #838 from Neilpang/dev
add VOLUME
2017-05-11 20:56:48 +08:00
neilpang
c487cd6af2 add VOLUME 2017-05-11 20:51:16 +08:00
neilpang
148f869bec fix https://github.com/Neilpang/acme.sh/issues/805 2017-04-27 22:21:59 +08:00
8 changed files with 128 additions and 68 deletions

View File

@@ -4,17 +4,17 @@ RUN apk update -f \
&& apk --no-cache add -f \ && apk --no-cache add -f \
openssl \ openssl \
curl \ curl \
netcat-openbsd netcat-openbsd \
&& rm -rf /var/cache/apk/*
ENV LE_CONFIG_HOME /acme.sh ENV LE_CONFIG_HOME /acme.sh
ENV AUTO_UPGRADE 1 ENV AUTO_UPGRADE 1
#Install #Install
RUN mkdir -p /install_acme.sh/
ADD ./ /install_acme.sh/ ADD ./ /install_acme.sh/
RUN cd /install_acme.sh && ([ -f /install_acme.sh/acme.sh ] && /install_acme.sh/acme.sh --install || curl https://get.acme.sh | sh) RUN cd /install_acme.sh && ([ -f /install_acme.sh/acme.sh ] && /install_acme.sh/acme.sh --install || curl https://get.acme.sh | sh) && rm -rf /install_acme.sh/
RUN rm -rf /install_acme.sh/
RUN ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh RUN ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
@@ -50,10 +50,12 @@ RUN for verb in help \
RUN printf "%b" '#!'"/usr/bin/env sh\n \ RUN printf "%b" '#!'"/usr/bin/env sh\n \
if [ \"\$1\" = \"daemon\" ]; then \n \ if [ \"\$1\" = \"daemon\" ]; then \n \
crond; tail -f /dev/null;\n \ crond -f\n \
else \n \ else \n \
/root/.acme.sh/acme.sh --config-home /acme.sh \"\$@\"\n \ /root/.acme.sh/acme.sh --config-home /acme.sh \"\$@\"\n \
fi" >/entry.sh && chmod +x /entry.sh fi" >/entry.sh && chmod +x /entry.sh
VOLUME /acme.sh
ENTRYPOINT ["/entry.sh"] ENTRYPOINT ["/entry.sh"]
CMD ["--help"] CMD ["--help"]

View File

@@ -1,4 +1,6 @@
# 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) # 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)
[![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)
- An ACME protocol client written purely in Shell (Unix shell) language. - An ACME protocol client written purely in Shell (Unix shell) language.
- Full ACME protocol implementation. - Full ACME protocol implementation.
- Simple, powerful and very easy to use. You only need 3 minutes to learn it. - Simple, powerful and very easy to use. You only need 3 minutes to learn it.
@@ -60,7 +62,7 @@ Twitter: [@neilpangxa](https://twitter.com/neilpangxa)
|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 |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
|20|[![Build Status](https://travis-ci.org/Neilpang/acme.sh.svg?branch=master)](https://travis-ci.org/Neilpang/acme.sh)|Mac OSX |20|[![Build Status](https://travis-ci.org/Neilpang/acme.sh.svg?branch=master)](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 https://github.com/Neilpang/acmetest
@@ -197,7 +199,7 @@ The ownership and permission info of existing files are preserved. You may want
Install/copy the issued cert/key to the production Apache or Nginx path. Install/copy the issued 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`.
# 4. Use Standalone server to issue cert # 4. Use Standalone server to issue cert

119
acme.sh
View File

@@ -1,6 +1,6 @@
#!/usr/bin/env sh #!/usr/bin/env sh
VER=2.6.9 VER=2.7.2
PROJECT_NAME="acme.sh" PROJECT_NAME="acme.sh"
@@ -104,21 +104,21 @@ if [ -t 1 ]; then
fi fi
__green() { __green() {
if [ "$__INTERACTIVE" ]; then if [ "$__INTERACTIVE${ACME_NO_COLOR}" = "1" ]; then
printf '\033[1;31;32m' printf '\033[1;31;32m'
fi fi
printf -- "%b" "$1" printf -- "%b" "$1"
if [ "$__INTERACTIVE" ]; then if [ "$__INTERACTIVE${ACME_NO_COLOR}" = "1" ]; then
printf '\033[0m' printf '\033[0m'
fi fi
} }
__red() { __red() {
if [ "$__INTERACTIVE" ]; then if [ "$__INTERACTIVE${ACME_NO_COLOR}" = "1" ]; then
printf '\033[1;31;40m' printf '\033[1;31;40m'
fi fi
printf -- "%b" "$1" printf -- "%b" "$1"
if [ "$__INTERACTIVE" ]; then if [ "$__INTERACTIVE${ACME_NO_COLOR}" = "1" ]; then
printf '\033[0m' printf '\033[0m'
fi fi
} }
@@ -151,6 +151,13 @@ _dlg_versions() {
echo "apache doesn't exists." echo "apache doesn't exists."
fi fi
echo "nginx:"
if _exists "nginx"; then
nginx -V 2>&1
else
echo "nginx doesn't exists."
fi
echo "nc:" echo "nc:"
if _exists "nc"; then if _exists "nc"; then
nc -h 2>&1 nc -h 2>&1
@@ -443,34 +450,48 @@ if [ "$(printf '\x41')" != 'A' ]; then
_URGLY_PRINTF=1 _URGLY_PRINTF=1
fi fi
_h2b() { _ESCAPE_XARGS=""
hex=$(cat) if [ "$(printf %s '\\x41' | xargs printf)" = 'A' ]; then
i=1 _ESCAPE_XARGS=1
j=2 fi
_debug3 _URGLY_PRINTF "$_URGLY_PRINTF" _h2b() {
while true; do if _exists xxd; then
if [ -z "$_URGLY_PRINTF" ]; then xxd -r -p
h="$(printf "%s" "$hex" | cut -c $i-$j)" return
if [ -z "$h" ]; then fi
break
fi hex=$(cat)
printf "\x$h%s" ic=""
jc=""
_debug2 _URGLY_PRINTF "$_URGLY_PRINTF"
if [ -z "$_URGLY_PRINTF" ]; then
if [ "$_ESCAPE_XARGS" ] && _exists xargs; then
_debug2 "xargs"
echo "$hex" | _upper_case | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/g' | xargs printf
else else
ic="$(printf "%s" "$hex" | cut -c $i)" for h in $(echo "$hex" | _upper_case | sed 's/\([0-9A-F]\{2\}\)/ \1/g'); do
jc="$(printf "%s" "$hex" | cut -c $j)" if [ -z "$h" ]; then
if [ -z "$ic$jc" ]; then break
break fi
printf "\x$h%s"
done
fi
else
for c in $(echo "$hex" | _upper_case | sed 's/\([0-9A-F]\)/ \1/g'); do
if [ -z "$ic" ]; then
ic=$c
continue
fi fi
jc=$c
ic="$(_h_char_2_dec "$ic")" ic="$(_h_char_2_dec "$ic")"
jc="$(_h_char_2_dec "$jc")" jc="$(_h_char_2_dec "$jc")"
printf '\'"$(printf "%o" "$(_math "$ic" \* 16 + $jc)")""%s" printf '\'"$(printf "%o" "$(_math "$ic" \* 16 + $jc)")""%s"
fi ic=""
jc=""
done
fi
i="$(_math "$i" + 2)"
j="$(_math "$j" + 2)"
done
} }
_is_solaris() { _is_solaris() {
@@ -1072,7 +1093,7 @@ _readSubjectFromCSR() {
_usage "_readSubjectFromCSR mycsr.csr" _usage "_readSubjectFromCSR mycsr.csr"
return 1 return 1
fi fi
${ACME_OPENSSL_BIN:-openssl} req -noout -in "$_csrfile" -subject | _egrep_o "CN *=.*" | cut -d = -f 2 | cut -d / -f 1 | tr -d '\n' ${ACME_OPENSSL_BIN:-openssl} req -noout -in "$_csrfile" -subject | tr ',' "\n" | _egrep_o "CN *=.*" | cut -d = -f 2 | cut -d / -f 1 | tr -d ' \n'
} }
#_csrfile #_csrfile
@@ -1115,7 +1136,7 @@ _readKeyLengthFromCSR() {
echo "$_outcsr" | tr "\t" " " | _egrep_o "^ *ASN1 OID:.*" | cut -d ':' -f 2 | tr -d ' ' echo "$_outcsr" | tr "\t" " " | _egrep_o "^ *ASN1 OID:.*" | cut -d ':' -f 2 | tr -d ' '
else else
_debug "RSA CSR" _debug "RSA CSR"
echo "$_outcsr" | tr "\t" " " | _egrep_o "(^ *|RSA )Public.Key:.*" | cut -d '(' -f 2 | cut -d ' ' -f 1 echo "$_outcsr" | tr "\t" " " | (_egrep_o "^ *Public.Key:.*" || _egrep_o "RSA Public.Key:.*") | cut -d '(' -f 2 | cut -d ' ' -f 1
fi fi
} }
@@ -1244,17 +1265,20 @@ createDomainKey() {
fi fi
domain=$1 domain=$1
length=$2 _cdl=$2
if [ -z "$length" ]; then if [ -z "$_cdl" ]; then
_debug "Use DEFAULT_DOMAIN_KEY_LENGTH=$DEFAULT_DOMAIN_KEY_LENGTH" _debug "Use DEFAULT_DOMAIN_KEY_LENGTH=$DEFAULT_DOMAIN_KEY_LENGTH"
length="$DEFAULT_DOMAIN_KEY_LENGTH" _cdl="$DEFAULT_DOMAIN_KEY_LENGTH"
fi fi
_initpath "$domain" "$length" _initpath "$domain" "$_cdl"
if [ ! -f "$CERT_KEY_PATH" ] || ([ "$FORCE" ] && ! [ "$IS_RENEW" ]); then if [ ! -f "$CERT_KEY_PATH" ] || ([ "$FORCE" ] && ! [ "$IS_RENEW" ]); then
_createkey "$length" "$CERT_KEY_PATH" if _createkey "$_cdl" "$CERT_KEY_PATH"; then
_savedomainconf Le_Keylength "$_cdl"
_info "The domain key is here: $(__green $CERT_KEY_PATH)"
fi
else else
if [ "$IS_RENEW" ]; then if [ "$IS_RENEW" ]; then
_info "Domain key exists, skip" _info "Domain key exists, skip"
@@ -1709,7 +1733,7 @@ _send_signed_request() {
nonce="$_CACHED_NONCE" nonce="$_CACHED_NONCE"
_debug2 nonce "$nonce" _debug2 nonce "$nonce"
protected="$JWK_HEADERPLACE_PART1$nonce$JWK_HEADERPLACE_PART2" protected="$JWK_HEADERPLACE_PART1$nonce\", \"url\": \"${url}$JWK_HEADERPLACE_PART2"
_debug3 protected "$protected" _debug3 protected "$protected"
protected64="$(printf "%s" "$protected" | _base64 | _url_replace)" protected64="$(printf "%s" "$protected" | _base64 | _url_replace)"
@@ -2562,7 +2586,7 @@ location ~ \"^/\.well-known/acme-challenge/([-_a-zA-Z0-9]+)\$\" {
_err "write nginx conf error, but don't worry, the file is restored." _err "write nginx conf error, but don't worry, the file is restored."
return 1 return 1
fi fi
_debug3 "Modified config:$(cat $FOUND_REAL_NGINX_CONF)"
_info "nginx conf is done, let's check it again." _info "nginx conf is done, let's check it again."
if ! _exec "nginx -t" >/dev/null; then if ! _exec "nginx -t" >/dev/null; then
_exec_err _exec_err
@@ -2648,12 +2672,14 @@ _isRealNginxConf() {
_debug "_seg_n" "$_seg_n" _debug "_seg_n" "$_seg_n"
if [ "$(echo "$_seg_n" | _egrep_o "^ *ssl *on *;")" ]; then if [ "$(echo "$_seg_n" | _egrep_o "^ *ssl *on *;")" ] \
|| [ "$(echo "$_seg_n" | _egrep_o "listen .* ssl[ |;]")" ]; then
_debug "ssl on, skip" _debug "ssl on, skip"
return 1 else
FOUND_REAL_NGINX_CONF_LN=$_fln
_debug3 "found FOUND_REAL_NGINX_CONF_LN" "$FOUND_REAL_NGINX_CONF_LN"
return 0
fi fi
FOUND_REAL_NGINX_CONF_LN=$_fln
return 0
fi fi
done done
fi fi
@@ -2704,7 +2730,7 @@ _clearup() {
_clearupdns() { _clearupdns() {
_debug "_clearupdns" _debug "_clearupdns"
if [ "$dnsadded" != 1 ] || [ -z "$vlist" ]; then if [ "$dnsadded" != 1 ] || [ -z "$vlist" ]; then
_debug "Dns not added, skip." _debug "skip dns."
return return
fi fi
@@ -3914,6 +3940,10 @@ signcsr() {
return 1 return 1
fi fi
_debug _csrsubj "$_csrsubj" _debug _csrsubj "$_csrsubj"
if _contains "$_csrsubj" ' ' || ! _contains "$_csrsubj" '.'; then
_info "It seems that the subject: $_csrsubj is not a valid domain name. Drop it."
_csrsubj=""
fi
_csrdomainlist=$(_readSubjectAltNamesFromCSR "$_csrfile") _csrdomainlist=$(_readSubjectAltNamesFromCSR "$_csrfile")
if [ "$?" != "0" ]; then if [ "$?" != "0" ]; then
@@ -4621,6 +4651,11 @@ install() {
return 1 return 1
fi fi
if [ -z "$_c_home" ] && [ "$LE_CONFIG_HOME" != "$LE_WORKING_DIR" ]; then
_info "Using config home: $LE_CONFIG_HOME"
_c_home="$LE_CONFIG_HOME"
fi
#convert from le #convert from le
if [ -d "$HOME/.le" ]; then if [ -d "$HOME/.le" ]; then
for envfile in "le.env" "le.sh.env"; do for envfile in "le.env" "le.sh.env"; do
@@ -4861,6 +4896,7 @@ Parameters:
--ca-bundle Specifies the path to the CA certificate bundle to verify api server's certificate. --ca-bundle Specifies the path to the CA certificate bundle to verify api server's certificate.
--ca-path Specifies directory containing CA certificates in PEM format, used by wget or curl. --ca-path Specifies directory containing CA certificates in PEM format, used by wget or curl.
--nocron Only valid for '--install' command, which means: do not install the default cron job. In this case, the certs will not be renewed automatically. --nocron Only valid for '--install' command, which means: do not install the default cron job. In this case, the certs will not be renewed automatically.
--no-color Do not output color text.
--ecc Specifies to use the ECC cert. Valid for '--install-cert', '--renew', '--revoke', '--toPkcs' and '--createCSR' --ecc Specifies to use the ECC cert. Valid for '--install-cert', '--renew', '--revoke', '--toPkcs' and '--createCSR'
--csr Specifies the input csr. --csr Specifies the input csr.
--pre-hook Command to be run before obtaining any certificates. --pre-hook Command to be run before obtaining any certificates.
@@ -5308,6 +5344,9 @@ _process() {
--nocron) --nocron)
_nocron="1" _nocron="1"
;; ;;
--no-color)
export ACME_NO_COLOR=1
;;
--ecc) --ecc)
_ecc="isEcc" _ecc="isEcc"
;; ;;

View File

@@ -140,7 +140,7 @@ Finally, make the DNS server and update Key available to `acme.sh`
``` ```
export NSUPDATE_SERVER="dns.example.com" export NSUPDATE_SERVER="dns.example.com"
export NSUPDATE_KEY="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==" export NSUPDATE_KEY="/path/to/your/nsupdate.key"
``` ```
Ok, let's issue a cert now: Ok, let's issue a cert now:

View File

@@ -122,18 +122,30 @@ dns_dynu_rm() {
# _domain_name=domain.com # _domain_name=domain.com
_get_root() { _get_root() {
domain=$1 domain=$1
if ! _dynu_rest GET "dns/getroot/$domain"; then i=2
return 1 p=1
fi while true; do
h=$(printf "%s" "$domain" | cut -d . -f $i-100)
_debug h "$h"
if [ -z "$h" ]; then
#not valid
return 1
fi
if ! _contains "$response" "domain_name"; then if ! _dynu_rest GET "dns/get/$h"; then
_debug "Domain name not found." return 1
return 1 fi
fi
if _contains "$response" "\"name\":\"$h\"" >/dev/null; then
_domain_name=$h
_node=$(printf "%s" "$domain" | cut -d . -f 1-$p)
return 0
fi
p=$i
i=$(_math "$i" + 1)
done
return 1
_domain_name=$(printf "%s" "$response" | tr -d "{}" | cut -d , -f 1 | cut -d : -f 2 | cut -d '"' -f 2)
_node=$(printf "%s" "$response" | tr -d "{}" | cut -d , -f 3 | cut -d : -f 2 | cut -d '"' -f 2)
return 0
} }
_get_recordid() { _get_recordid() {

View File

@@ -37,7 +37,7 @@ dns_gandi_livedns_add() {
_debug sub_domain "$_sub_domain" _debug sub_domain "$_sub_domain"
_gandi_livedns_rest PUT "domains/$_domain/records/$_sub_domain/TXT" "{\"rrset_ttl\": 300, \"rrset_values\":[\"$txtvalue\"]}" \ _gandi_livedns_rest PUT "domains/$_domain/records/$_sub_domain/TXT" "{\"rrset_ttl\": 300, \"rrset_values\":[\"$txtvalue\"]}" \
&& _contains "$response" '{"message": "Zone Record Created"}' \ && _contains "$response" '{"message": "DNS Record Created"}' \
&& _info "Add $(__green "success")" && _info "Add $(__green "success")"
} }

View File

@@ -9,7 +9,7 @@ dns_infoblox_add() {
## Nothing to see here, just some housekeeping ## Nothing to see here, just some housekeeping
fulldomain=$1 fulldomain=$1
txtvalue=$2 txtvalue=$2
baseurlnObject="https://$Infoblox_Server/wapi/v2.2.2/record:txt?name=$fulldomain&text=$txtvalue" baseurlnObject="https://$Infoblox_Server/wapi/v2.2.2/record:txt?name=$fulldomain&text=$txtvalue&view=$Infoblox_View"
_info "Using Infoblox API" _info "Using Infoblox API"
_debug fulldomain "$fulldomain" _debug fulldomain "$fulldomain"
@@ -19,14 +19,19 @@ dns_infoblox_add() {
if [ -z "$Infoblox_Creds" ] || [ -z "$Infoblox_Server" ]; then if [ -z "$Infoblox_Creds" ] || [ -z "$Infoblox_Server" ]; then
Infoblox_Creds="" Infoblox_Creds=""
Infoblox_Server="" Infoblox_Server=""
_err "You didn't specify the credentials or server yet (Infoblox_Creds and Infoblox_Server)." _err "You didn't specify the credentials, server or infoblox view yet (Infoblox_Creds, Infoblox_Server and Infoblox_View)."
_err "Please set them via EXPORT ([username:password] and [ip or hostname]) and try again." _err "Please set them via EXPORT ([username:password], [ip or hostname]) and try again."
return 1 return 1
fi fi
if [ -z "$Infoblox_View" ]; then
Infoblox_View="default"
fi
## Save the credentials to the account file ## Save the credentials to the account file
_saveaccountconf Infoblox_Creds "$Infoblox_Creds" _saveaccountconf Infoblox_Creds "$Infoblox_Creds"
_saveaccountconf Infoblox_Server "$Infoblox_Server" _saveaccountconf Infoblox_Server "$Infoblox_Server"
_saveaccountconf Infoblox_View "$Infoblox_View"
## Base64 encode the credentials ## Base64 encode the credentials
Infoblox_CredsEncoded=$(printf "%b" "$Infoblox_Creds" | _base64) Infoblox_CredsEncoded=$(printf "%b" "$Infoblox_Creds" | _base64)
@@ -39,7 +44,7 @@ dns_infoblox_add() {
result=$(_post "" "$baseurlnObject" "" "POST") result=$(_post "" "$baseurlnObject" "" "POST")
## Let's see if we get something intelligible back from the unit ## Let's see if we get something intelligible back from the unit
if echo "$result" | egrep 'record:txt/.*:.*/default'; then if echo "$result" | egrep "record:txt/.*:.*/$Infoblox_View"; then
_info "Successfully created the txt record" _info "Successfully created the txt record"
return 0 return 0
else else
@@ -68,18 +73,18 @@ dns_infoblox_rm() {
export _H2="Authorization: Basic $Infoblox_CredsEncoded" export _H2="Authorization: Basic $Infoblox_CredsEncoded"
## Does the record exist? Let's check. ## Does the record exist? Let's check.
baseurlnObject="https://$Infoblox_Server/wapi/v2.2.2/record:txt?name=$fulldomain&text=$txtvalue&_return_type=xml-pretty" baseurlnObject="https://$Infoblox_Server/wapi/v2.2.2/record:txt?name=$fulldomain&text=$txtvalue&view=$Infoblox_View&_return_type=xml-pretty"
result=$(_get "$baseurlnObject") result=$(_get "$baseurlnObject")
## Let's see if we get something intelligible back from the grid ## Let's see if we get something intelligible back from the grid
if echo "$result" | egrep 'record:txt/.*:.*/default'; then if echo "$result" | egrep "record:txt/.*:.*/$Infoblox_View"; then
## Extract the object reference ## Extract the object reference
objRef=$(printf "%b" "$result" | _egrep_o 'record:txt/.*:.*/default') objRef=$(printf "%b" "$result" | _egrep_o "record:txt/.*:.*/$Infoblox_View")
objRmUrl="https://$Infoblox_Server/wapi/v2.2.2/$objRef" objRmUrl="https://$Infoblox_Server/wapi/v2.2.2/$objRef"
## Delete them! All the stale records! ## Delete them! All the stale records!
rmResult=$(_post "" "$objRmUrl" "" "DELETE") rmResult=$(_post "" "$objRmUrl" "" "DELETE")
## Let's see if that worked ## Let's see if that worked
if echo "$rmResult" | egrep 'record:txt/.*:.*/default'; then if echo "$rmResult" | egrep "record:txt/.*:.*/$Infoblox_View"; then
_info "Successfully deleted $objRef" _info "Successfully deleted $objRef"
return 0 return 0
else else

View File

@@ -238,7 +238,7 @@ _get_root() {
return 1 return 1
fi fi
if ! _contains "$response" "This service does not exist" >/dev/null; then if ! _contains "$response" "This service does not exist" >/dev/null && ! _contains "$response" "NOT_GRANTED_CALL" >/dev/null; then
_sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p) _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
_domain="$h" _domain="$h"
return 0 return 0