Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
15c68c95
Unverified
Commit
15c68c95
authored
Jul 24, 2021
by
neil
Committed by
GitHub
Jul 24, 2021
Browse files
Merge pull request #3620 from acmesh-official/dev
sync
parents
a76dcd4b
08438608
Changes
4
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
15c68c95
...
...
@@ -20,18 +20,18 @@
-
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
-
Support
ECDSA certs
-
Support
SAN and
wildcard certs
-
Simple, powerful and very easy to use. You only need 3 minutes to learn it.
-
Bash, dash and sh compatible.
-
Purely written in Shell with no dependencies on python
or the official Let's Encrypt client
.
-
Purely written in Shell with no dependencies on python.
-
Just one script to issue, renew and install your certificates automatically.
-
DOES NOT require
`root/sudoer`
access.
-
Docker
friendl
y
-
IPv6
support
-
Docker
read
y
-
IPv6
ready
-
Cron job notifications for renewal or error etc.
It's probably the
`easiest & smartest`
shell script to automatically issue & renew the free certificates
from Let's Encrypt
.
It's probably the
`easiest & smartest`
shell script to automatically issue & renew the free certificates.
Wiki: https://github.com/acmesh-official/acme.sh/wiki
...
...
acme.sh
View file @
15c68c95
...
...
@@ -1768,7 +1768,7 @@ _inithttp() {
if [ -z "$ACME_HTTP_NO_REDIRECTS" ]; then
_ACME_CURL="$_ACME_CURL -L "
fi
if [ "$DEBUG" ] && [ "$DEBUG" -ge
"2"
]; then
if [ "$DEBUG" ] && [ "$DEBUG" -ge
2
]; then
_CURL_DUMP="$(_mktemp)"
_ACME_CURL="$_ACME_CURL --trace-ascii $_CURL_DUMP "
fi
...
...
@@ -1808,6 +1808,8 @@ _inithttp() {
}
_HTTP_MAX_RETRY=8
# body url [needbase64] [POST|PUT|DELETE] [ContentType]
_post() {
body="$1"
...
...
@@ -1815,6 +1817,33 @@ _post() {
needbase64="$3"
httpmethod="$4"
_postContentType="$5"
_sleep_retry_sec=1
_http_retry_times=0
_hcode=0
while [ "${_http_retry_times}" -le "$_HTTP_MAX_RETRY" ]; do
[ "$_http_retry_times" = "$_HTTP_MAX_RETRY" ]
_lastHCode="$?"
_debug "Retrying post"
_post_impl "$body" "$_post_url" "$needbase64" "$httpmethod" "$_postContentType" "$_lastHCode"
_hcode="$?"
_debug _hcode "$_hcode"
if [ "$_hcode" = "0" ]; then
break
fi
_http_retry_times=$(_math $_http_retry_times + 1)
_sleep $_sleep_retry_sec
done
return $_hcode
}
# body url [needbase64] [POST|PUT|DELETE] [ContentType] [displayError]
_post_impl() {
body="$1"
_post_url="$2"
needbase64="$3"
httpmethod="$4"
_postContentType="$5"
displayError="$6"
if [ -z "$httpmethod" ]; then
httpmethod="POST"
...
...
@@ -1866,7 +1895,9 @@ _post() {
fi
_ret="$?"
if [ "$_ret" != "0" ]; then
_err "Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: $_ret"
if [ -z "$displayError" ] || [ "$displayError" = "0" ]; then
_err "Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: $_ret"
fi
if [ "$DEBUG" ] && [ "$DEBUG" -ge "2" ]; then
_err "Here is the curl dump log:"
_err "$(cat "$_CURL_DUMP")"
...
...
@@ -1922,7 +1953,9 @@ _post() {
_debug "wget returns 8, the server returns a 'Bad request' response, lets process the response later."
fi
if [ "$_ret" != "0" ]; then
_err "Please refer to https://www.gnu.org/software/wget/manual/html_node/Exit-Status.html for error code: $_ret"
if [ -z "$displayError" ] || [ "$displayError" = "0" ]; then
_err "Please refer to https://www.gnu.org/software/wget/manual/html_node/Exit-Status.html for error code: $_ret"
fi
fi
_sed_i "s/^ *//g" "$HTTP_HEADER"
else
...
...
@@ -1936,13 +1969,38 @@ _post() {
# url getheader timeout
_get() {
url="$1"
onlyheader="$2"
t="$3"
_sleep_retry_sec=1
_http_retry_times=0
_hcode=0
while [ "${_http_retry_times}" -le "$_HTTP_MAX_RETRY" ]; do
[ "$_http_retry_times" = "$_HTTP_MAX_RETRY" ]
_lastHCode="$?"
_debug "Retrying GET"
_get_impl "$url" "$onlyheader" "$t" "$_lastHCode"
_hcode="$?"
_debug _hcode "$_hcode"
if [ "$_hcode" = "0" ]; then
break
fi
_http_retry_times=$(_math $_http_retry_times + 1)
_sleep $_sleep_retry_sec
done
return $_hcode
}
# url getheader timeout displayError
_get_impl() {
_debug GET
url="$1"
onlyheader="$2"
t="$3"
displayError="$4"
_debug url "$url"
_debug "timeout=$t"
_debug "displayError" "$displayError"
_inithttp
if [ "$_ACME_CURL" ] && [ "${ACME_USE_WGET:-0}" = "0" ]; then
...
...
@@ -1961,7 +2019,9 @@ _get() {
fi
ret=$?
if [ "$ret" != "0" ]; then
_err "Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: $ret"
if [ -z "$displayError" ] || [ "$displayError" = "0" ]; then
_err "Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: $ret"
fi
if [ "$DEBUG" ] && [ "$DEBUG" -ge "2" ]; then
_err "Here is the curl dump log:"
_err "$(cat "$_CURL_DUMP")"
...
...
@@ -1987,7 +2047,9 @@ _get() {
_debug "wget returns 8, the server returns a 'Bad request' response, lets process the response later."
fi
if [ "$ret" != "0" ]; then
_err "Please refer to https://www.gnu.org/software/wget/manual/html_node/Exit-Status.html for error code: $ret"
if [ -z "$displayError" ] || [ "$displayError" = "0" ]; then
_err "Please refer to https://www.gnu.org/software/wget/manual/html_node/Exit-Status.html for error code: $ret"
fi
fi
else
ret=$?
...
...
@@ -3925,7 +3987,7 @@ _ns_lookup_ali() {
}
_ns_is_available_dp() {
if _get "https://d
ns.alidns.com
" "" 1 >/dev/null 2>&1; then
if _get "https://d
oh.pub
" "" 1 >/dev/null 2>&1; then
return 0
else
return 1
...
...
@@ -4712,26 +4774,13 @@ $_authorizations_map"
return 1
fi
_debug "sleep 2 secs to verify"
sleep 2
_debug "checking"
_send_signed_request "$uri"
if [ "$?" != "0" ]; then
_err "$d:Verify error:$response"
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
_clearup
_on_issue_err "$_post_hook" "$vlist"
return 1
fi
_debug2 original "$response"
response="$(echo "$response" | _normalizeJson)"
_debug2 response "$response"
status=$(echo "$response" | _egrep_o '"status":"[^"]*' | cut -d : -f 2 | tr -d '"')
_debug2 status "$status"
if _contains "$status" "invalid"; then
error="$(echo "$response" | _egrep_o '"error":\{[^\}]*')"
_debug2 error "$error"
...
...
@@ -4763,9 +4812,9 @@ $_authorizations_map"
fi
if [ "$status" = "pending" ]; then
_info "Pending"
_info "Pending
, The CA is processing your order, please just wait. ($waittimes/$MAX_RETRY_TIMES)
"
elif [ "$status" = "processing" ]; then
_info "Processing"
_info "Processing
, The CA is processing your order, please just wait. ($waittimes/$MAX_RETRY_TIMES)
"
else
_err "$d:Verify error:$response"
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
...
...
@@ -4773,7 +4822,19 @@ $_authorizations_map"
_on_issue_err "$_post_hook" "$vlist"
return 1
fi
_debug "sleep 2 secs to verify again"
sleep 2
_debug "checking"
_send_signed_request "$uri"
if [ "$?" != "0" ]; then
_err "$d:Verify error:$response"
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
_clearup
_on_issue_err "$_post_hook" "$vlist"
return 1
fi
done
done
...
...
dnsapi/dns_ovh.sh
View file @
15c68c95
...
...
@@ -261,7 +261,9 @@ _get_root() {
return
1
fi
if
!
_contains
"
$response
"
"This service does not exist"
>
/dev/null
&&
!
_contains
"
$response
"
"NOT_GRANTED_CALL"
>
/dev/null
;
then
if
!
_contains
"
$response
"
"This service does not exist"
>
/dev/null
&&
!
_contains
"
$response
"
"This call has not been granted"
>
/dev/null
&&
!
_contains
"
$response
"
"NOT_GRANTED_CALL"
>
/dev/null
;
then
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
$p
)
_domain
=
"
$h
"
return
0
...
...
notify/sendgrid.sh
View file @
15c68c95
...
...
@@ -37,11 +37,19 @@ sendgrid_send() {
fi
_saveaccountconf_mutable SENDGRID_FROM
"
$SENDGRID_FROM
"
SENDGRID_FROM_NAME
=
"
${
SENDGRID_FROM_NAME
:-
$(
_readaccountconf_mutable SENDGRID_FROM_NAME
)
}
"
_saveaccountconf_mutable SENDGRID_FROM_NAME
"
$SENDGRID_FROM_NAME
"
export
_H1
=
"Authorization: Bearer
$SENDGRID_API_KEY
"
export
_H2
=
"Content-Type: application/json"
_content
=
"
$(
echo
"
$_content
"
| _json_encode
)
"
_data
=
"{
\"
personalizations
\"
: [{
\"
to
\"
: [{
\"
email
\"
:
\"
$SENDGRID_TO
\"
}]}],
\"
from
\"
: {
\"
email
\"
:
\"
$SENDGRID_FROM
\"
},
\"
subject
\"
:
\"
$_subject
\"
,
\"
content
\"
: [{
\"
type
\"
:
\"
text/plain
\"
,
\"
value
\"
:
\"
$_content
\"
}]}"
if
[
-z
"
$SENDGRID_FROM_NAME
"
]
;
then
_data
=
"{
\"
personalizations
\"
: [{
\"
to
\"
: [{
\"
email
\"
:
\"
$SENDGRID_TO
\"
}]}],
\"
from
\"
: {
\"
email
\"
:
\"
$SENDGRID_FROM
\"
},
\"
subject
\"
:
\"
$_subject
\"
,
\"
content
\"
: [{
\"
type
\"
:
\"
text/plain
\"
,
\"
value
\"
:
\"
$_content
\"
}]}"
else
_data
=
"{
\"
personalizations
\"
: [{
\"
to
\"
: [{
\"
email
\"
:
\"
$SENDGRID_TO
\"
}]}],
\"
from
\"
: {
\"
email
\"
:
\"
$SENDGRID_FROM
\"
,
\"
name
\"
:
\"
$SENDGRID_FROM_NAME
\"
},
\"
subject
\"
:
\"
$_subject
\"
,
\"
content
\"
: [{
\"
type
\"
:
\"
text/plain
\"
,
\"
value
\"
:
\"
$_content
\"
}]}"
fi
response
=
"
$(
_post
"
$_data
"
"https://api.sendgrid.com/v3/mail/send"
)
"
if
[
"
$?
"
=
"0"
]
&&
[
-z
"
$response
"
]
;
then
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment