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
Commit
67afa940
authored
Jan 05, 2016
by
neil
Browse files
support Standalone server
parent
7d076cfc
Changes
1
Hide whitespace changes
Inline
Side-by-side
le.sh
View file @
67afa940
#!/bin/bash
#!/bin/bash
WORKING_DIR
=
~/.le
CURL_HEADER
=
""
HEADER
=
""
HEADERPLACE
=
""
ACCOUNT_EMAIL
=
""
DEFAULT_CA
=
"https://acme-v01.api.letsencrypt.org"
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
()
{
_debug
()
{
...
@@ -213,8 +208,35 @@ _setopt() {
...
@@ -213,8 +208,35 @@ _setopt() {
_debug
"
$(
grep
-H
-n
"^
$__opt$__sep
"
$__conf
)
"
_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
()
{
_initpath
()
{
WORKING_DIR
=
~/.le
if
[
-z
"
$WORKING_DIR
"
]
;
then
WORKING_DIR
=
~/.le
fi
domain
=
$1
domain
=
$1
mkdir
-p
$WORKING_DIR
mkdir
-p
$WORKING_DIR
ACCOUNT_KEY_PATH
=
$WORKING_DIR
/account.acc
ACCOUNT_KEY_PATH
=
$WORKING_DIR
/account.acc
...
@@ -260,9 +282,23 @@ issue() {
...
@@ -260,9 +282,23 @@ issue() {
fi
fi
fi
fi
if
[
-z
"
$Le_Webroot
"
]
;
then
if
[
"
$Le_Webroot
"
==
"no"
]
;
then
echo
Usage:
$0
webroot a.com
[
b.com,c.com]
[
key-length]
_info
"Standalone mode."
return
1
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
fi
createAccountKey
$Le_Domain
$Le_Keylength
createAccountKey
$Le_Domain
$Le_Keylength
...
@@ -294,9 +330,9 @@ issue() {
...
@@ -294,9 +330,9 @@ issue() {
_info
"Registering account"
_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
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
fi
_send_signed_request
"
$API
/acme/new-reg"
"
$regjson
"
_send_signed_request
"
$API
/acme/new-reg"
"
$regjson
"
...
@@ -337,13 +373,20 @@ issue() {
...
@@ -337,13 +373,20 @@ issue() {
keyauthorization
=
"
$token
.
$thumbprint
"
keyauthorization
=
"
$token
.
$thumbprint
"
_debug keyauthorization
"
$keyauthorization
"
_debug keyauthorization
"
$keyauthorization
"
wellknown_path
=
"
$Le_Webroot
/.well-known/acme-challenge"
if
[
"
$Le_Webroot
"
==
"no"
]
;
then
_debug wellknown_path
"
$wellknown_path
"
_info
"Standalone mode server"
_startserver
"
$keyauthorization
"
& 2>&1
>
/dev/null
mkdir
-p
"
$wellknown_path
"
serverproc
=
"
$!
"
wellknown_path
=
"
$wellknown_path
/
$token
"
sleep
2
echo
-n
"
$keyauthorization
"
>
$wellknown_path
_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
"
wellknown_url
=
"http://
$d
/.well-known/acme-challenge/
$token
"
_debug wellknown_url
"
$wellknown_url
"
_debug wellknown_url
"
$wellknown_url
"
...
@@ -352,6 +395,7 @@ issue() {
...
@@ -352,6 +395,7 @@ issue() {
if
[
!
-z
"
$code
"
]
&&
[
!
"
$code
"
==
'202'
]
;
then
if
[
!
-z
"
$code
"
]
&&
[
!
"
$code
"
==
'202'
]
;
then
_err
"challenge error:
$d
"
_err
"challenge error:
$d
"
_stopserver
$serverproc
return
1
return
1
fi
fi
...
@@ -362,6 +406,7 @@ issue() {
...
@@ -362,6 +406,7 @@ issue() {
if
!
_get
$uri
;
then
if
!
_get
$uri
;
then
_err
"Verify error:
$resource
"
_err
"Verify error:
$resource
"
_stopserver
$serverproc
return
1
return
1
fi
fi
...
@@ -374,6 +419,7 @@ issue() {
...
@@ -374,6 +419,7 @@ issue() {
if
[
"
$status
"
==
"invalid"
]
;
then
if
[
"
$status
"
==
"invalid"
]
;
then
error
=
$(
echo
$response
| egrep
-o
'"error":{[^}]*}'
|
grep
-o
'"detail":"[^"]*"'
|
cut
-d
'"'
-f
4
)
error
=
$(
echo
$response
| egrep
-o
'"error":{[^}]*}'
|
grep
-o
'"detail":"[^"]*"'
|
cut
-d
'"'
-f
4
)
_err
"Verify error:
$error
"
_err
"Verify error:
$error
"
_stopserver
$serverproc
return
1
;
return
1
;
fi
fi
...
@@ -381,10 +427,12 @@ issue() {
...
@@ -381,10 +427,12 @@ issue() {
_info
"Verify pending:
$d
"
_info
"Verify pending:
$d
"
else
else
_err
"Verify error:
$response
"
_err
"Verify error:
$response
"
_stopserver
$serverproc
return
1
return
1
fi
fi
done
done
_stopserver
$serverproc
done
done
_info
"Verify finished, start to sign."
_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