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
803a7aa8
Commit
803a7aa8
authored
Nov 24, 2016
by
neil
Committed by
GitHub
Nov 24, 2016
Browse files
Merge pull request #420 from Neilpang/dev
Add DNS API support for aliyun
parents
8b1fb3cb
93f3098a
Changes
4
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
803a7aa8
...
@@ -260,6 +260,7 @@ You don't have to do anything manually!
...
@@ -260,6 +260,7 @@ You don't have to do anything manually!
1.
LuaDNS.com API
1.
LuaDNS.com API
1.
DNSMadeEasy.com API
1.
DNSMadeEasy.com API
1.
nsupdate API
1.
nsupdate API
1.
aliyun.com(阿里云) API
**More APIs coming soon...**
**More APIs coming soon...**
...
...
acme.sh
View file @
803a7aa8
...
@@ -90,7 +90,7 @@ _printargs() {
...
@@ -90,7 +90,7 @@ _printargs() {
if
[
-z
"
$2
"
]
;
then
if
[
-z
"
$2
"
]
;
then
printf
--
"[
$(
date
)
]
$1
"
printf
--
"[
$(
date
)
]
$1
"
else
else
printf
--
"[
$(
date
)
]
$1
='
$2
'"
printf
--
"%s"
"[
$(
date
)
]
$1
='
$2
'"
fi
fi
printf
"
\n
"
printf
"
\n
"
}
}
...
@@ -2797,7 +2797,7 @@ issue() {
...
@@ -2797,7 +2797,7 @@ issue() {
status
=
$(
echo
"
$response
"
| _egrep_o
'"status":"[^"]*'
|
cut
-d
:
-f
2 |
tr
-d
'"'
)
status
=
$(
echo
"
$response
"
| _egrep_o
'"status":"[^"]*'
|
cut
-d
:
-f
2 |
tr
-d
'"'
)
if
[
"
$status
"
=
"valid"
]
;
then
if
[
"
$status
"
=
"valid"
]
;
then
_info
"Success"
_info
"
$(
__green
Success
)
"
_stopserver
"
$serverproc
"
_stopserver
"
$serverproc
"
serverproc
=
""
serverproc
=
""
_clearupwebbroot
"
$_currentRoot
"
"
$removelevel
"
"
$token
"
_clearupwebbroot
"
$_currentRoot
"
"
$removelevel
"
"
$token
"
...
...
dnsapi/README.md
View file @
803a7aa8
...
@@ -201,7 +201,24 @@ acme.sh --issue --dns dns_aws -d example.com -d www.example.com
...
@@ -201,7 +201,24 @@ acme.sh --issue --dns dns_aws -d example.com -d www.example.com
The
`AWS_ACCESS_KEY_ID`
and
`AWS_SECRET_ACCESS_KEY`
will be saved in
`~/.acme.sh/account.conf`
and will be reused when needed.
The
`AWS_ACCESS_KEY_ID`
and
`AWS_SECRET_ACCESS_KEY`
will be saved in
`~/.acme.sh/account.conf`
and will be reused when needed.
# 11. Use custom API
## 11. Use Aliyun domain API to automatically issue cert
First you need to login to your Aliyun account to get your API key.
[
https://ak-console.aliyun.com/#/accesskey
](
https://ak-console.aliyun.com/#/accesskey
)
```
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
```
Ok, let's issue a cert now:
```
acme.sh --issue --dns dns_ali -d example.com -d www.example.com
```
The
`Ali_Key`
and
`Ali_Secret`
will be saved in
`~/.acme.sh/account.conf`
and will be reused when needed.
# 12. Use custom API
If your API is not supported yet, you can write your own DNS API.
If your API is not supported yet, you can write your own DNS API.
...
@@ -218,6 +235,6 @@ acme.sh --issue --dns dns_myapi -d example.com -d www.example.com
...
@@ -218,6 +235,6 @@ acme.sh --issue --dns dns_myapi -d example.com -d www.example.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
)
## 1
2
. Use lexicon DNS API
## 1
3
. Use lexicon DNS API
https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
dnsapi/dns_ali.sh
0 → 100644
View file @
803a7aa8
#!/usr/bin/env sh
Ali_API
=
"https://alidns.aliyuncs.com/"
#Ali_Key="LTqIA87hOKdjevsf5"
#Ali_Secret="0p5EYueFNq501xnCPzKNbx6K51qPH2"
#Usage: dns_ali_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_ali_add
()
{
fulldomain
=
$1
txtvalue
=
$2
if
[
-z
"
$Ali_Key
"
]
||
[
-z
"
$Ali_Secret
"
]
;
then
Ali_Key
=
""
Ali_Secret
=
""
_err
"You don't specify aliyun api key and secret yet."
return
1
fi
#save the api key and secret to the account conf file.
_saveaccountconf Ali_Key
"
$Ali_Key
"
_saveaccountconf Ali_Secret
"
$Ali_Secret
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
return
1
fi
_debug
"Add record"
_add_record_query
"
$_domain
"
"
$_sub_domain
"
"
$txtvalue
"
&&
_ali_rest
"Add record"
}
dns_ali_rm
()
{
fulldomain
=
$1
_clean
}
#################### Private functions bellow ##################################
_get_root
()
{
domain
=
$1
i
=
2
p
=
1
while
true
;
do
h
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
$i
-100
)
if
[
-z
"
$h
"
]
;
then
#not valid
return
1
fi
_describe_records_query
"
$h
"
if
!
_ali_rest
"Get root"
"ignore"
;
then
return
1
fi
if
_contains
"
$response
"
"PageNumber"
;
then
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
$p
)
_debug _sub_domain
"
$_sub_domain
"
_domain
=
"
$h
"
_debug _domain
"
$_domain
"
return
0
fi
p
=
"
$i
"
i
=
$(
_math
"
$i
"
+ 1
)
done
return
1
}
_ali_rest
()
{
signature
=
$(
printf
"%s"
"GET&%2F&
$(
_ali_urlencode
"
$query
"
)
"
| _hmac
"sha1"
"
$(
_hex
"
$Ali_Secret
&"
)
"
| _base64
)
signature
=
$(
_ali_urlencode
"
$signature
"
)
url
=
"
$Ali_API
?
$query
&Signature=
$signature
"
if
!
response
=
"
$(
_get
"
$url
"
)
"
;
then
_err
"Error <
$1
>"
return
1
fi
if
[
-z
"
$2
"
]
;
then
message
=
"
$(
printf
"%s"
"
$response
"
| _egrep_o
"
\"
Message
\"
:
\"
[^
\"
]*
\"
"
|
cut
-d
:
-f
2 |
tr
-d
\"
)
"
if
[
-n
"
$message
"
]
;
then
_err
"
$message
"
return
1
fi
fi
_debug2 response
"
$response
"
return
0
}
_ali_urlencode
()
{
_str
=
"
$1
"
_str_len
=
${#
_str
}
_u_i
=
1
while
[
"
$_u_i
"
-le
"
$_str_len
"
]
;
do
_str_c
=
"
$(
printf
"%s"
"
$_str
"
|
cut
-c
"
$_u_i
"
)
"
case
$_str_c
in
[
a-zA-Z0-9.~_-]
)
printf
"%s"
"
$_str_c
"
;;
*
)
printf
"%%%02X"
"'
$_str_c
"
;;
esac
_u_i
=
"
$(
_math
"
$_u_i
"
+ 1
)
"
done
}
_ali_nonce
()
{
#_head_n 1 </dev/urandom | _digest "sha256" hex | cut -c 1-31
#Not so good...
date
+
"%s%N"
}
_check_exist_query
()
{
query
=
''
query
=
$query
'AccessKeyId='
$Ali_Key
query
=
$query
'&Action=DescribeDomainRecords'
query
=
$query
'&DomainName='
$1
query
=
$query
'&Format=json'
query
=
$query
'&RRKeyWord=_acme-challenge'
query
=
$query
'&SignatureMethod=HMAC-SHA1'
query
=
$query
"&SignatureNonce=
$(
_ali_nonce
)
"
query
=
$query
'&SignatureVersion=1.0'
query
=
$query
'&Timestamp='
$(
_timestamp
)
query
=
$query
'&TypeKeyWord=TXT'
query
=
$query
'&Version=2015-01-09'
}
_add_record_query
()
{
query
=
''
query
=
$query
'AccessKeyId='
$Ali_Key
query
=
$query
'&Action=AddDomainRecord'
query
=
$query
'&DomainName='
$1
query
=
$query
'&Format=json'
query
=
$query
'&RR='
$2
query
=
$query
'&SignatureMethod=HMAC-SHA1'
query
=
$query
"&SignatureNonce=
$(
_ali_nonce
)
"
query
=
$query
'&SignatureVersion=1.0'
query
=
$query
'&Timestamp='
$(
_timestamp
)
query
=
$query
'&Type=TXT'
query
=
$query
'&Value='
$3
query
=
$query
'&Version=2015-01-09'
}
_delete_record_query
()
{
query
=
''
query
=
$query
'AccessKeyId='
$Ali_Key
query
=
$query
'&Action=DeleteDomainRecord'
query
=
$query
'&Format=json'
query
=
$query
'&RecordId='
$1
query
=
$query
'&SignatureMethod=HMAC-SHA1'
query
=
$query
"&SignatureNonce=
$(
_ali_nonce
)
"
query
=
$query
'&SignatureVersion=1.0'
query
=
$query
'&Timestamp='
$(
_timestamp
)
query
=
$query
'&Version=2015-01-09'
}
_describe_records_query
()
{
query
=
''
query
=
$query
'AccessKeyId='
$Ali_Key
query
=
$query
'&Action=DescribeDomainRecords'
query
=
$query
'&DomainName='
$1
query
=
$query
'&Format=json'
query
=
$query
'&SignatureMethod=HMAC-SHA1'
query
=
$query
"&SignatureNonce=
$(
_ali_nonce
)
"
query
=
$query
'&SignatureVersion=1.0'
query
=
$query
'&Timestamp='
$(
_timestamp
)
query
=
$query
'&Version=2015-01-09'
}
_clean
()
{
_check_exist_query
"
$_domain
"
if
!
_ali_rest
"Check exist records"
"ignore"
;
then
return
1
fi
records
=
"
$(
echo
"
$response
"
-n
| _egrep_o
"
\"
RecordId
\"
:
\"
[^
\"
]*
\"
"
|
cut
-d
:
-f
2 |
tr
-d
\"
)
"
printf
"%s"
"
$records
"
\
|
while
read
-r
record_id
;
do
_delete_record_query
"
$record_id
"
_ali_rest
"Delete record
$record_id
"
"ignore"
done
}
_timestamp
()
{
date
-u
+
"%Y-%m-%dT%H%%3A%M%%3A%SZ"
}
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