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
5e574a35
Unverified
Commit
5e574a35
authored
Nov 10, 2021
by
neil
Committed by
GitHub
Nov 10, 2021
Browse files
Merge pull request #3800 from acmesh-official/dev
sync
parents
b2fc84c9
640c7c5f
Changes
6
Hide whitespace changes
Inline
Side-by-side
.github/workflows/PebbleStrict.yml
View file @
5e574a35
...
@@ -35,5 +35,28 @@ jobs:
...
@@ -35,5 +35,28 @@ jobs:
run
:
curl --request POST --data '{"ip":"10.30.50.1"}' http://localhost:8055/set-default-ipv4
run
:
curl --request POST --data '{"ip":"10.30.50.1"}' http://localhost:8055/set-default-ipv4
-
name
:
Clone acmetest
-
name
:
Clone acmetest
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
-
name
:
Run acmetest
run
:
cd ../acmetest && ./letest.sh
PebbleStrict_IPCert
:
runs-on
:
ubuntu-latest
env
:
TestingDomain
:
10.30.50.1
ACME_DIRECTORY
:
https://localhost:14000/dir
HTTPS_INSECURE
:
1
Le_HTTPPort
:
5002
Le_TLSPort
:
5001
TEST_LOCAL
:
1
TEST_CA
:
"
Pebble
Intermediate
CA"
TEST_IPCERT
:
1
steps
:
-
uses
:
actions/checkout@v2
-
name
:
Install tools
run
:
sudo apt-get install -y socat
-
name
:
Run Pebble
run
:
cd .. && curl https://raw.githubusercontent.com/letsencrypt/pebble/master/docker-compose.yml >docker-compose.yml && docker-compose up -d
-
name
:
Clone acmetest
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
-
name
:
Run acmetest
-
name
:
Run acmetest
run
:
cd ../acmetest && ./letest.sh
run
:
cd ../acmetest && ./letest.sh
\ No newline at end of file
Dockerfile
View file @
5e574a35
...
@@ -55,6 +55,7 @@ RUN for verb in help \
...
@@ -55,6 +55,7 @@ RUN for verb in help \
deactivate-account
\
deactivate-account
\
set-notify
\
set-notify
\
set-default-ca
\
set-default-ca
\
set-default-chain
\
;
do
\
;
do
\
printf
--
"%b"
"#!/usr/bin/env sh
\n
/root/.acme.sh/acme.sh --
${
verb
}
--config-home /acme.sh
\"\$
@
\"
"
>
/usr/local/bin/--
${
verb
}
&&
chmod
+x /usr/local/bin/--
${
verb
}
\
printf
--
"%b"
"#!/usr/bin/env sh
\n
/root/.acme.sh/acme.sh --
${
verb
}
--config-home /acme.sh
\"\$
@
\"
"
>
/usr/local/bin/--
${
verb
}
&&
chmod
+x /usr/local/bin/--
${
verb
}
\
;
done
;
done
...
...
acme.sh
View file @
5e574a35
#!/usr/bin/env sh
#!/usr/bin/env sh
VER
=
3.0.
1
VER
=
3.0.
2
PROJECT_NAME
=
"acme.sh"
PROJECT_NAME
=
"acme.sh"
...
@@ -59,6 +59,9 @@ VTYPE_HTTP="http-01"
...
@@ -59,6 +59,9 @@ VTYPE_HTTP="http-01"
VTYPE_DNS
=
"dns-01"
VTYPE_DNS
=
"dns-01"
VTYPE_ALPN
=
"tls-alpn-01"
VTYPE_ALPN
=
"tls-alpn-01"
ID_TYPE_DNS
=
"dns"
ID_TYPE_IP
=
"ip"
LOCAL_ANY_ADDRESS
=
"0.0.0.0"
LOCAL_ANY_ADDRESS
=
"0.0.0.0"
DEFAULT_RENEW
=
60
DEFAULT_RENEW
=
60
...
@@ -426,13 +429,11 @@ _secure_debug3() {
...
@@ -426,13 +429,11 @@ _secure_debug3() {
}
}
_upper_case
()
{
_upper_case
()
{
# shellcheck disable=SC2018,SC2019
tr
'[:lower:]'
'[:upper:]'
tr
'a-z'
'A-Z'
}
}
_lower_case
()
{
_lower_case
()
{
# shellcheck disable=SC2018,SC2019
tr
'[:upper:]'
'[:lower:]'
tr
'A-Z'
'a-z'
}
}
_startswith
()
{
_startswith
()
{
...
@@ -1222,19 +1223,27 @@ _createcsr() {
...
@@ -1222,19 +1223,27 @@ _createcsr() {
if
[
"
$acmeValidationv1
"
]
;
then
if
[
"
$acmeValidationv1
"
]
;
then
domainlist
=
"
$(
_idn
"
$domainlist
"
)
"
domainlist
=
"
$(
_idn
"
$domainlist
"
)
"
printf
--
"
\n
subjectAltName=DNS:
$domainlist
"
>>
"
$csrconf
"
_debug2 domainlist
"
$domainlist
"
alt
=
""
for
dl
in
$(
echo
"
$domainlist
"
|
tr
","
' '
)
;
do
if
[
"
$alt
"
]
;
then
alt
=
"
$alt
,
$(
_getIdType
"
$dl
"
| _upper_case
)
:
$dl
"
else
alt
=
"
$(
_getIdType
"
$dl
"
| _upper_case
)
:
$dl
"
fi
done
printf
--
"
\n
subjectAltName=
$alt
"
>>
"
$csrconf
"
elif
[
-z
"
$domainlist
"
]
||
[
"
$domainlist
"
=
"
$NO_VALUE
"
]
;
then
elif
[
-z
"
$domainlist
"
]
||
[
"
$domainlist
"
=
"
$NO_VALUE
"
]
;
then
#single domain
#single domain
_info
"Single domain"
"
$domain
"
_info
"Single domain"
"
$domain
"
printf
--
"
\n
subjectAltName=
DNS
:
$(
_idn
"
$domain
"
)
"
>>
"
$csrconf
"
printf
--
"
\n
subjectAltName=
$(
_getIdType
"
$domain
"
| _upper_case
)
:
$(
_idn
"
$domain
"
)
"
>>
"
$csrconf
"
else
else
domainlist
=
"
$(
_idn
"
$domainlist
"
)
"
domainlist
=
"
$(
_idn
"
$domainlist
"
)
"
_debug2 domainlist
"
$domainlist
"
_debug2 domainlist
"
$domainlist
"
if
_contains
"
$domainlist
"
","
;
then
alt
=
"
$(
_getIdType
"
$domain
"
| _upper_case
)
:
$domain
"
alt
=
"DNS:
$(
_idn
"
$domain
"
)
,DNS:
$(
echo
"
$domainlist
"
|
sed
"s/,,/,/g"
|
sed
"s/,/,DNS:/g"
)
"
for
dl
in
$(
echo
"
$domainlist
"
|
tr
","
' '
)
;
do
else
alt
=
"
$alt
,
$(
_getIdType
"
$dl
"
| _upper_case
)
:
$dl
"
alt
=
"DNS:
$(
_idn
"
$domain
"
)
,DNS:
$domainlist
"
done
fi
#multi
#multi
_info
"Multi domain"
"
$alt
"
_info
"Multi domain"
"
$alt
"
printf
--
"
\n
subjectAltName=
$alt
"
>>
"
$csrconf
"
printf
--
"
\n
subjectAltName=
$alt
"
>>
"
$csrconf
"
...
@@ -4174,6 +4183,36 @@ _match_issuer() {
...
@@ -4174,6 +4183,36 @@ _match_issuer() {
_contains
"
$_rootissuer
"
"
$_missuer
"
_contains
"
$_rootissuer
"
"
$_missuer
"
}
}
#ip
_isIPv4
()
{
for
seg
in
$(
echo
"
$1
"
|
tr
'.'
' '
)
;
do
if
[
$seg
-ge
0
]
2>/dev/null
&&
[
$seg
-le
255
]
2>/dev/null
;
then
continue
fi
return
1
done
return
0
}
#ip6
_isIPv6
()
{
_contains
"
$1
"
":"
}
#ip
_isIP
()
{
_isIPv4
"
$1
"
||
_isIPv6
"
$1
"
}
#identifier
_getIdType
()
{
if
_isIP
"
$1
"
;
then
echo
"
$ID_TYPE_IP
"
else
echo
"
$ID_TYPE_DNS
"
fi
}
#webroot, domain domainlist keylength
#webroot, domain domainlist keylength
issue
()
{
issue
()
{
if
[
-z
"
$2
"
]
;
then
if
[
-z
"
$2
"
]
;
then
...
@@ -4330,7 +4369,7 @@ issue() {
...
@@ -4330,7 +4369,7 @@ issue() {
dvsep
=
','
dvsep
=
','
if
[
-z
"
$vlist
"
]
;
then
if
[
-z
"
$vlist
"
]
;
then
#make new order request
#make new order request
_identifiers
=
"{
\"
type
\"
:
\"
dns
\"
,
\"
value
\"
:
\"
$(
_idn
"
$_main_domain
"
)
\"
}"
_identifiers
=
"{
\"
type
\"
:
\"
$(
_getIdType
"
$_main_domain
"
)
\"
,
\"
value
\"
:
\"
$(
_idn
"
$_main_domain
"
)
\"
}"
_w_index
=
1
_w_index
=
1
while
true
;
do
while
true
;
do
d
=
"
$(
echo
"
$_alt_domains
,"
|
cut
-d
,
-f
"
$_w_index
"
)
"
d
=
"
$(
echo
"
$_alt_domains
,"
|
cut
-d
,
-f
"
$_w_index
"
)
"
...
@@ -4339,7 +4378,7 @@ issue() {
...
@@ -4339,7 +4378,7 @@ issue() {
if
[
-z
"
$d
"
]
;
then
if
[
-z
"
$d
"
]
;
then
break
break
fi
fi
_identifiers
=
"
$_identifiers
,{
\"
type
\"
:
\"
dns
\"
,
\"
value
\"
:
\"
$(
_idn
"
$d
"
)
\"
}"
_identifiers
=
"
$_identifiers
,{
\"
type
\"
:
\"
$(
_getIdType
"
$d
"
)
\"
,
\"
value
\"
:
\"
$(
_idn
"
$d
"
)
\"
}"
done
done
_debug2 _identifiers
"
$_identifiers
"
_debug2 _identifiers
"
$_identifiers
"
if
!
_send_signed_request
"
$ACME_NEW_ORDER
"
"{
\"
identifiers
\"
: [
$_identifiers
]}"
;
then
if
!
_send_signed_request
"
$ACME_NEW_ORDER
"
"{
\"
identifiers
\"
: [
$_identifiers
]}"
;
then
...
@@ -5674,8 +5713,16 @@ installcronjob() {
...
@@ -5674,8 +5713,16 @@ installcronjob() {
if
[
-f
"
$LE_WORKING_DIR
/
$PROJECT_ENTRY
"
]
;
then
if
[
-f
"
$LE_WORKING_DIR
/
$PROJECT_ENTRY
"
]
;
then
lesh
=
"
\"
$LE_WORKING_DIR
\"
/
$PROJECT_ENTRY
"
lesh
=
"
\"
$LE_WORKING_DIR
\"
/
$PROJECT_ENTRY
"
else
else
_err
"Can not install cronjob,
$PROJECT_ENTRY
not found."
_debug
"_SCRIPT_"
"
$_SCRIPT_
"
return
1
_script
=
"
$(
_readlink
"
$_SCRIPT_
"
)
"
_debug _script
"
$_script
"
if
[
-f
"
$_script
"
]
;
then
_info
"Using the current script from:
$_script
"
lesh
=
"
$_script
"
else
_err
"Can not install cronjob,
$PROJECT_ENTRY
not found."
return
1
fi
fi
fi
if
[
"
$_c_home
"
]
;
then
if
[
"
$_c_home
"
]
;
then
_c_entry
=
"--config-home
\"
$_c_home
\"
"
_c_entry
=
"--config-home
\"
$_c_home
\"
"
...
@@ -5902,7 +5949,7 @@ _deactivate() {
...
@@ -5902,7 +5949,7 @@ _deactivate() {
_initAPI
_initAPI
fi
fi
_identifiers
=
"{
\"
type
\"
:
\"
dns
\"
,
\"
value
\"
:
\"
$_d_domain
\"
}"
_identifiers
=
"{
\"
type
\"
:
\"
$(
_getIdType
"
$_d_domain
"
)
\"
,
\"
value
\"
:
\"
$_d_domain
\"
}"
if
!
_send_signed_request
"
$ACME_NEW_ORDER
"
"{
\"
identifiers
\"
: [
$_identifiers
]}"
;
then
if
!
_send_signed_request
"
$ACME_NEW_ORDER
"
"{
\"
identifiers
\"
: [
$_identifiers
]}"
;
then
_err
"Can not get domain new order."
_err
"Can not get domain new order."
return
1
return
1
...
@@ -5938,7 +5985,7 @@ _deactivate() {
...
@@ -5938,7 +5985,7 @@ _deactivate() {
thumbprint
=
"
$(
__calc_account_thumbprint
)
"
thumbprint
=
"
$(
__calc_account_thumbprint
)
"
fi
fi
_debug
"Trigger validation."
_debug
"Trigger validation."
vtype
=
"
$
VTYPE_DNS
"
vtype
=
"
$
(
_getIdType
"
$_d_domain
"
)
"
entry
=
"
$(
echo
"
$response
"
| _egrep_o
'[^\{]*"type":"'
$vtype
'"[^\}]*'
)
"
entry
=
"
$(
echo
"
$response
"
| _egrep_o
'[^\{]*"type":"'
$vtype
'"[^\}]*'
)
"
_debug entry
"
$entry
"
_debug entry
"
$entry
"
if
[
-z
"
$entry
"
]
;
then
if
[
-z
"
$entry
"
]
;
then
...
...
deploy/synology_dsm.sh
View file @
5e574a35
...
@@ -100,6 +100,7 @@ synology_dsm_deploy() {
...
@@ -100,6 +100,7 @@ synology_dsm_deploy() {
if
[
-z
"
$token
"
]
;
then
if
[
-z
"
$token
"
]
;
then
_err
"Unable to authenticate to
$SYNO_Hostname
:
$SYNO_Port
using
$SYNO_Scheme
."
_err
"Unable to authenticate to
$SYNO_Hostname
:
$SYNO_Port
using
$SYNO_Scheme
."
_err
"Check your username and password."
_err
"Check your username and password."
_err
"If two-factor authentication is enabled for the user, you have to choose another user."
return
1
return
1
fi
fi
sid
=
$(
echo
"
$response
"
|
grep
"sid"
|
sed
-n
's/.*"sid" *: *"\([^"]*\).*/\1/p'
)
sid
=
$(
echo
"
$response
"
|
grep
"sid"
|
sed
-n
's/.*"sid" *: *"\([^"]*\).*/\1/p'
)
...
...
notify/feishu.sh
0 → 100644
View file @
5e574a35
#!/usr/bin/env sh
#Support feishu webhooks api
#required
#FEISHU_WEBHOOK="xxxx"
#optional
#FEISHU_KEYWORD="yyyy"
# subject content statusCode
feishu_send
()
{
_subject
=
"
$1
"
_content
=
"
$2
"
_statusCode
=
"
$3
"
#0: success, 1: error 2($RENEW_SKIP): skipped
_debug
"_subject"
"
$_subject
"
_debug
"_content"
"
$_content
"
_debug
"_statusCode"
"
$_statusCode
"
FEISHU_WEBHOOK
=
"
${
FEISHU_WEBHOOK
:-
$(
_readaccountconf_mutable FEISHU_WEBHOOK
)
}
"
if
[
-z
"
$FEISHU_WEBHOOK
"
]
;
then
FEISHU_WEBHOOK
=
""
_err
"You didn't specify a feishu webhooks FEISHU_WEBHOOK yet."
_err
"You can get yours from https://www.feishu.cn"
return
1
fi
_saveaccountconf_mutable FEISHU_WEBHOOK
"
$FEISHU_WEBHOOK
"
FEISHU_KEYWORD
=
"
${
FEISHU_KEYWORD
:-
$(
_readaccountconf_mutable FEISHU_KEYWORD
)
}
"
if
[
"
$FEISHU_KEYWORD
"
]
;
then
_saveaccountconf_mutable FEISHU_KEYWORD
"
$FEISHU_KEYWORD
"
fi
_content
=
$(
echo
"
$_content
"
| _json_encode
)
_subject
=
$(
echo
"
$_subject
"
| _json_encode
)
_data
=
"{
\"
msg_type
\"
:
\"
text
\"
,
\"
content
\"
: {
\"
text
\"
:
\"
[
$FEISHU_KEYWORD
]
\n
$_subject
\n
$_content
\"
}}"
response
=
"
$(
_post
"
$_data
"
"
$FEISHU_WEBHOOK
"
""
"POST"
"application/json"
)
"
if
[
"
$?
"
=
"0"
]
&&
_contains
"
$response
"
"StatusCode
\"
:0"
;
then
_info
"feishu webhooks event fired success."
return
0
fi
_err
"feishu webhooks event fired error."
_err
"
$response
"
return
1
}
notify/mail.sh
View file @
5e574a35
...
@@ -62,7 +62,7 @@ mail_send() {
...
@@ -62,7 +62,7 @@ mail_send() {
fi
fi
contenttype
=
"text/plain; charset=utf-8"
contenttype
=
"text/plain; charset=utf-8"
subject
=
"=?UTF-8?B?
$(
echo
"
$_subject
"
| _base64
)
?="
subject
=
"=?UTF-8?B?
$(
printf
--
"%b"
"
$_subject
"
| _base64
)
?="
result
=
$(
{
_mail_body |
eval
"
$(
_mail_cmnd
)
"
;
}
2>&1
)
result
=
$(
{
_mail_body |
eval
"
$(
_mail_cmnd
)
"
;
}
2>&1
)
# shellcheck disable=SC2181
# shellcheck disable=SC2181
...
@@ -131,6 +131,7 @@ _mail_body() {
...
@@ -131,6 +131,7 @@ _mail_body() {
echo
"To:
$MAIL_TO
"
echo
"To:
$MAIL_TO
"
echo
"Subject:
$subject
"
echo
"Subject:
$subject
"
echo
"Content-Type:
$contenttype
"
echo
"Content-Type:
$contenttype
"
echo
"MIME-Version: 1.0"
echo
echo
;;
;;
esac
esac
...
...
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