diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 9d9b7cbe..c37492b7 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -56,7 +56,7 @@ query_le_v2() { # Save http response to file passed as "$4" arg or print to stdout if not provided # http response headers are always sent to stdout local save_to_file=${4:-"/dev/stdout"} - curl --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" + curl --location --user-agent "MyVestaCP" --insecure --retry 5 --retry-connrefused --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" } @@ -154,6 +154,8 @@ authz=$(echo "$answer" |grep "acme/authz" |cut -f2 -d '"') echo "[$(date)] : authz=$authz" >> /usr/local/vesta/log/letsencrypt.log finalize=$(echo "$answer" |grep 'finalize":' |cut -f4 -d '"') echo "[$(date)] : finalize=$finalize" >> /usr/local/vesta/log/letsencrypt.log +order=$(echo -e "$answer" | grep -i location | cut -f2 -d \ | tr -d '\r\n') +echo "[$(date)] : order=$order" >> /usr/local/vesta/log/letsencrypt.log status=$(echo "$answer" |grep HTTP/ |tail -n1 |cut -f2 -d ' ') echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log if [[ "$status" -ne 201 ]]; then @@ -324,16 +326,34 @@ if [[ "$status" -ne 200 ]]; then check_result $E_CONNECT "Let's Encrypt finalize bad status $status" fi if [ "$certificate" = "" ]; then - echo "[$(date)] : EXIT=Let's Encrypt 'certificate' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt 'certificate' is empty on step 6" + validation="processing" + i=1 + while [ "$validation" = "processing" ]; do + echo "[$(date)] : --- Polling server waiting for Certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log + answer=$(query_le_v2 "$order" "" "$nonce") + i=$((i + 1)) + + nonce=$(echo "$answer" | grep -i nonce | cut -f2 -d \ | tr -d '\r\n') + echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log + status=$(echo "$answer" | grep HTTP/ | tail -n1 | cut -f 2 -d ' ') + echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log + validation=$(echo "$answer" | grep 'status":' | cut -f4 -d '"') + echo "[$(date)] : validation=$validation" >> /usr/local/vesta/log/letsencrypt.log + certificate=$(echo "$answer" | grep 'certificate":' | cut -f4 -d '"') + echo "[$(date)] : certificate=$certificate" >> /usr/local/vesta/log/letsencrypt.log + sleep $((i * 2)) # Sleep for 2s, 4s, 6s, 8s + if [ $i -gt 10 ]; then + check_result "$E_CONNECT" "Certificate processing timeout ($domain)" + fi + done fi if [ "$nonce" = "" ]; then echo "[$(date)] : EXIT=Let's Encrypt 'nonce' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log check_result $E_CONNECT "Let's Encrypt 'nonce' is empty on step 6" fi -# Downloading signed certificate / STEP 7 -echo "[$(date)] : --- Downloading signed certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log +# Downloading signed certificate / STEP 8 +echo "[$(date)] : --- Downloading signed certificate / STEP 8 ---" >> /usr/local/vesta/log/letsencrypt.log echo "[$(date)] : query_le_v2 \"$certificate\" \"\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log answer=$(query_le_v2 "$certificate" "" "$nonce" "$ssl_dir/$domain.pem") echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log