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
67afa940
You need to sign in or sign up before continuing.
Commit
67afa940
authored
Jan 05, 2016
by
neil
Browse files
support Standalone server
parent
7d076cfc
Changes
1
Show whitespace changes
Inline
Side-by-side
le.sh
View file @
67afa940
#!/bin/bash
WORKING_DIR
=
~/.le
CURL_HEADER
=
""
HEADER
=
""
HEADERPLACE
=
""
ACCOUNT_EMAIL
=
""
DEFAULT_CA
=
"https://acme-v01.api.letsencrypt.org"
DEFAULT_AGREEMENT
=
"https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf"
API
=
$DEFAULT_CA
API
=
"
$DEFAULT_CA
"
AGREEMENT
=
"
$DEFAULT_AGREEMENT
"
_debug
()
{
...
...
@@ -213,8 +208,35 @@ _setopt() {
_debug
"
$(
grep
-H
-n
"^
$__opt$__sep
"
$__conf
)
"
}
_startserver
()
{
content
=
"
$1
"
while
true
;
do
if
[
-z
"
$DEBUG
"
]
;
then
echo
-e
-n
"HTTP/1.1 200 OK
\r\n\r\n
$content
"
| nc
-q
1
-l
-p
80
>
/dev/null
else
echo
-e
-n
"HTTP/1.1 200 OK
\r\n\r\n
$content
"
| nc
-q
1
-l
-p
80
fi
done
}
_stopserver
()
{
pid
=
"
$1
"
if
[
"
$pid
"
]
;
then
if
[
-z
"
$DEBUG
"
]
;
then
kill
-s
9
$pid
2>&1
killall
-s
9 nc 2>&1
else
kill
-s
9
$pid
2>&1
>
/dev/null
killall
-s
9 nc 2>&1
>
/dev/null
fi
fi
}
_initpath
()
{
if
[
-z
"
$WORKING_DIR
"
]
;
then
WORKING_DIR
=
~/.le
fi
domain
=
$1
mkdir
-p
$WORKING_DIR
ACCOUNT_KEY_PATH
=
$WORKING_DIR
/account.acc
...
...
@@ -260,10 +282,24 @@ issue() {
fi
fi
if
[
-z
"
$Le_Webroot
"
]
;
then
echo
Usage:
$0
webroot a.com
[
b.com,c.com]
[
key-length]
if
[
"
$Le_Webroot
"
==
"no"
]
;
then
_info
"Standalone mode."
if
!
command
-v
"nc"
>
/dev/null
;
then
_err
"Please install netcat(nc) tools first."
return
1
fi
if
!
command
-v
"netstat"
>
/dev/null
;
then
_err
"Please install netstat first."
return
1
fi
netprc
=
"
$(
netstat
-antpl
|
grep
':80 '
)
"
if
[
"
$netprc
"
]
;
then
_err
"
$netprc
"
_err
"tcp port 80 is already used by
$(
echo
"
$netprc
"
|
cut
-d
'/'
-f
2
)
"
_err
"Please stop it first"
return
1
fi
fi
createAccountKey
$Le_Domain
$Le_Keylength
...
...
@@ -294,9 +330,9 @@ issue() {
_info
"Registering account"
regjson
=
'{"resource": "new-reg", "agreement": "
https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf
"}'
regjson
=
'{"resource": "new-reg", "agreement": "
'
$AGREEMENT
'
"}'
if
[
"
$ACCOUNT_EMAIL
"
]
;
then
regjson
=
'{"resource": "new-reg", "contact": ["mailto: '
$ACCOUNT_EMAIL
'"], "agreement": "
https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf
"}'
regjson
=
'{"resource": "new-reg", "contact": ["mailto: '
$ACCOUNT_EMAIL
'"], "agreement": "
'
$AGREEMENT
'
"}'
fi
_send_signed_request
"
$API
/acme/new-reg"
"
$regjson
"
...
...
@@ -337,13 +373,20 @@ issue() {
keyauthorization
=
"
$token
.
$thumbprint
"
_debug keyauthorization
"
$keyauthorization
"
if
[
"
$Le_Webroot
"
==
"no"
]
;
then
_info
"Standalone mode server"
_startserver
"
$keyauthorization
"
& 2>&1
>
/dev/null
serverproc
=
"
$!
"
sleep
2
_debug serverproc
$serverproc
else
wellknown_path
=
"
$Le_Webroot
/.well-known/acme-challenge"
_debug wellknown_path
"
$wellknown_path
"
mkdir
-p
"
$wellknown_path
"
wellknown_path
=
"
$wellknown_path
/
$token
"
echo
-n
"
$keyauthorization
"
>
$wellknown_path
fi
wellknown_url
=
"http://
$d
/.well-known/acme-challenge/
$token
"
_debug wellknown_url
"
$wellknown_url
"
...
...
@@ -352,6 +395,7 @@ issue() {
if
[
!
-z
"
$code
"
]
&&
[
!
"
$code
"
==
'202'
]
;
then
_err
"challenge error:
$d
"
_stopserver
$serverproc
return
1
fi
...
...
@@ -362,6 +406,7 @@ issue() {
if
!
_get
$uri
;
then
_err
"Verify error:
$resource
"
_stopserver
$serverproc
return
1
fi
...
...
@@ -374,6 +419,7 @@ issue() {
if
[
"
$status
"
==
"invalid"
]
;
then
error
=
$(
echo
$response
| egrep
-o
'"error":{[^}]*}'
|
grep
-o
'"detail":"[^"]*"'
|
cut
-d
'"'
-f
4
)
_err
"Verify error:
$error
"
_stopserver
$serverproc
return
1
;
fi
...
...
@@ -381,10 +427,12 @@ issue() {
_info
"Verify pending:
$d
"
else
_err
"Verify error:
$response
"
_stopserver
$serverproc
return
1
fi
done
_stopserver
$serverproc
done
_info
"Verify finished, start to sign."
...
...
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