mirror of
https://github.com/plantroon/acme.sh.git
synced 2024-12-26 15:02:03 +00:00
Fetch agreement tos dynamically, fix https://github.com/Neilpang/acme.sh/issues/253
This commit is contained in:
parent
86c017ec9d
commit
d404e92d16
160
acme.sh
160
acme.sh
@ -48,9 +48,6 @@ RENEW_SKIP=2
|
|||||||
ECC_SEP="_"
|
ECC_SEP="_"
|
||||||
ECC_SUFFIX="${ECC_SEP}ecc"
|
ECC_SUFFIX="${ECC_SEP}ecc"
|
||||||
|
|
||||||
if [ -z "$AGREEMENT" ] ; then
|
|
||||||
AGREEMENT="$DEFAULT_AGREEMENT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
__INTERACTIVE=""
|
__INTERACTIVE=""
|
||||||
if [ -t 1 ] ; then
|
if [ -t 1 ] ; then
|
||||||
@ -1767,6 +1764,93 @@ _on_issue_success() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_regAccount() {
|
||||||
|
_initpath
|
||||||
|
if [ ! -f "$ACCOUNT_KEY_PATH" ] ; then
|
||||||
|
_acck="no"
|
||||||
|
if [ "$Le_Keylength" ] ; then
|
||||||
|
_acck="$Le_Keylength"
|
||||||
|
fi
|
||||||
|
if ! createAccountKey "$_acck" ; then
|
||||||
|
_err "Create account key error."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! _calcjwk "$ACCOUNT_KEY_PATH" ; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_updateTos=""
|
||||||
|
_reg_res="new-reg"
|
||||||
|
while true ;
|
||||||
|
do
|
||||||
|
_debug AGREEMENT "$AGREEMENT"
|
||||||
|
accountkey_json=$(printf "%s" "$jwk" | tr -d ' ' )
|
||||||
|
thumbprint=$(printf "%s" "$accountkey_json" | _digest "sha256" | _urlencode)
|
||||||
|
|
||||||
|
regjson='{"resource": "'$_reg_res'", "agreement": "'$AGREEMENT'"}'
|
||||||
|
|
||||||
|
if [ "$ACCOUNT_EMAIL" ] ; then
|
||||||
|
regjson='{"resource": "'$_reg_res'", "contact": ["mailto: '$ACCOUNT_EMAIL'"], "agreement": "'$AGREEMENT'"}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$_updateTos" ] ; then
|
||||||
|
_info "Registering account"
|
||||||
|
|
||||||
|
if ! _send_signed_request "$API/acme/new-reg" "$regjson" ; then
|
||||||
|
_err "Register account Error: $response"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$code" = "" ] || [ "$code" = '201' ] ; then
|
||||||
|
echo "$response" > $LE_WORKING_DIR/account.json
|
||||||
|
_info "Registered"
|
||||||
|
elif [ "$code" = '409' ] ; then
|
||||||
|
_info "Already registered"
|
||||||
|
else
|
||||||
|
_err "Register account Error: $response"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_accUri="$(echo "$responseHeaders" | grep "^Location:" | cut -d ' ' -f 2| tr -d "\r\n")"
|
||||||
|
_debug "_accUri" "$_accUri"
|
||||||
|
ACCOUNT_URL="$_accUri"
|
||||||
|
_saveaccountconf ACCOUNT_URL "$ACCOUNT_URL"
|
||||||
|
|
||||||
|
_tos="$(echo "$responseHeaders" | grep "^Link:.*rel=\"terms-of-service\"" | _egrep_o "<.*>" | tr -d '<>')"
|
||||||
|
_debug "_tos" "$_tos"
|
||||||
|
if [ -z "$_tos" ] ; then
|
||||||
|
_debug "Use default tos: $DEFAULT_AGREEMENT"
|
||||||
|
_tos="$DEFAULT_AGREEMENT"
|
||||||
|
fi
|
||||||
|
if [ "$_tos" != "$AGREEMENT" ]; then
|
||||||
|
_updateTos=1
|
||||||
|
AGREEMENT="$_tos"
|
||||||
|
_reg_res="reg"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
_debug "Update tos: $_tos"
|
||||||
|
if ! _send_signed_request "$_accUri" "$regjson" ; then
|
||||||
|
_err "Update tos error."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [ "$code" = '202' ] ; then
|
||||||
|
_debug "Update tos success."
|
||||||
|
else
|
||||||
|
_err "Update tos error."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#webroot, domain domainlist keylength
|
#webroot, domain domainlist keylength
|
||||||
issue() {
|
issue() {
|
||||||
if [ -z "$2" ] ; then
|
if [ -z "$2" ] ; then
|
||||||
@ -1826,67 +1910,19 @@ issue() {
|
|||||||
Le_Alt=""
|
Le_Alt=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$Le_Keylength" = "$NO_VALUE" ] ; then
|
||||||
|
Le_Keylength=""
|
||||||
|
fi
|
||||||
|
|
||||||
if ! _on_before_issue ; then
|
if ! _on_before_issue ; then
|
||||||
_err "_on_before_issue."
|
_err "_on_before_issue."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$ACCOUNT_KEY_PATH" ] ; then
|
if ! _regAccount ; then
|
||||||
_acck="$NO_VALUE"
|
|
||||||
if [ "$Le_Keylength" ] ; then
|
|
||||||
_acck="$Le_Keylength"
|
|
||||||
fi
|
|
||||||
if ! createAccountKey "$_acck" ; then
|
|
||||||
_err "Create account key error."
|
|
||||||
if [ "$usingApache" ] ; then
|
|
||||||
_restoreApache
|
|
||||||
fi
|
|
||||||
_on_issue_err
|
_on_issue_err
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
if ! _calcjwk "$ACCOUNT_KEY_PATH" ; then
|
|
||||||
if [ "$usingApache" ] ; then
|
|
||||||
_restoreApache
|
|
||||||
fi
|
|
||||||
_on_issue_err
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
accountkey_json=$(printf "%s" "$jwk" | tr -d ' ' )
|
|
||||||
thumbprint=$(printf "%s" "$accountkey_json" | _digest "sha256" | _urlencode)
|
|
||||||
|
|
||||||
regjson='{"resource": "new-reg", "agreement": "'$AGREEMENT'"}'
|
|
||||||
if [ "$ACCOUNT_EMAIL" ] ; then
|
|
||||||
regjson='{"resource": "new-reg", "contact": ["mailto: '$ACCOUNT_EMAIL'"], "agreement": "'$AGREEMENT'"}'
|
|
||||||
fi
|
|
||||||
|
|
||||||
accountkeyhash="$(cat "$ACCOUNT_KEY_PATH" | _digest "sha256" )"
|
|
||||||
accountkeyhash="$(echo $accountkeyhash$API$regjson | _digest "sha256" )"
|
|
||||||
if [ "$accountkeyhash" != "$ACCOUNT_KEY_HASH" ] ; then
|
|
||||||
_info "Registering account"
|
|
||||||
_send_signed_request "$API/acme/new-reg" "$regjson"
|
|
||||||
if [ "$code" = "" ] || [ "$code" = '201' ] ; then
|
|
||||||
_info "Registered"
|
|
||||||
echo "$response" > $LE_WORKING_DIR/account.json
|
|
||||||
elif [ "$code" = '409' ] ; then
|
|
||||||
_info "Already registered"
|
|
||||||
else
|
|
||||||
_err "Register account Error: $response"
|
|
||||||
_clearup
|
|
||||||
_on_issue_err
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
ACCOUNT_KEY_HASH="$accountkeyhash"
|
|
||||||
_saveaccountconf "ACCOUNT_KEY_HASH" "$ACCOUNT_KEY_HASH"
|
|
||||||
else
|
|
||||||
_info "Skip register account key"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$Le_Keylength" = "$NO_VALUE" ] ; then
|
|
||||||
Le_Keylength=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ -f "$CSR_PATH" ] && [ ! -f "$CERT_KEY_PATH" ] ; then
|
if [ -f "$CSR_PATH" ] && [ ! -f "$CERT_KEY_PATH" ] ; then
|
||||||
@ -2301,13 +2337,18 @@ issue() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
_rcert="$response"
|
||||||
Le_LinkCert="$(grep -i '^Location.*$' $HTTP_HEADER | head -1 | tr -d "\r\n" | cut -d " " -f 2)"
|
Le_LinkCert="$(grep -i '^Location.*$' $HTTP_HEADER | head -1 | tr -d "\r\n" | cut -d " " -f 2)"
|
||||||
_savedomainconf "Le_LinkCert" "$Le_LinkCert"
|
_savedomainconf "Le_LinkCert" "$Le_LinkCert"
|
||||||
|
|
||||||
if [ "$Le_LinkCert" ] ; then
|
if [ "$Le_LinkCert" ] ; then
|
||||||
echo "$BEGIN_CERT" > "$CERT_PATH"
|
echo "$BEGIN_CERT" > "$CERT_PATH"
|
||||||
_get "$Le_LinkCert" | _base64 "multiline" >> "$CERT_PATH"
|
|
||||||
|
if ! _get "$Le_LinkCert" | _base64 "multiline" >> "$CERT_PATH" ; then
|
||||||
|
_debug "Get cert failed. Let's try last response."
|
||||||
|
printf -- "%s" "$_rcert" | _dbase64 "multiline" | _base64 "multiline" >> "$CERT_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "$END_CERT" >> "$CERT_PATH"
|
echo "$END_CERT" >> "$CERT_PATH"
|
||||||
_info "$(__green "Cert success.")"
|
_info "$(__green "Cert success.")"
|
||||||
cat "$CERT_PATH"
|
cat "$CERT_PATH"
|
||||||
@ -2918,6 +2959,9 @@ _initconf() {
|
|||||||
#ACCOUNT_KEY_PATH=\"/path/to/account.key\"
|
#ACCOUNT_KEY_PATH=\"/path/to/account.key\"
|
||||||
#CERT_HOME=\"/path/to/cert/home\"
|
#CERT_HOME=\"/path/to/cert/home\"
|
||||||
|
|
||||||
|
#ACCOUNT_URL=\"\"
|
||||||
|
|
||||||
|
|
||||||
#LOG_FILE=\"$DEFAULT_LOG_FILE\"
|
#LOG_FILE=\"$DEFAULT_LOG_FILE\"
|
||||||
|
|
||||||
#AUTO_UPGRADE=\"1\"
|
#AUTO_UPGRADE=\"1\"
|
||||||
|
Loading…
Reference in New Issue
Block a user