@@ -151,7 +151,41 @@ function update_cert {
151151
152152 # CLI parameters array used for --issue
153153 local -a params_issue_arr
154- params_issue_arr+=(--webroot /usr/share/nginx/html)
154+
155+ # ACME challenge type
156+ local -n acme_challenge=" ACME_${cid} _CHALLENGE"
157+ if [[ -z " ${acme_challenge} " ]]; then
158+ acme_challenge=" ${ACME_CHALLENGE:- HTTP-01} "
159+ fi
160+
161+ if [[ " $acme_challenge " == " HTTP-01" ]]; then
162+ # HTTP-01 challenge
163+ params_issue_arr+=(--webroot /usr/share/nginx/html)
164+ elif [[ " $acme_challenge " == " DNS-01" ]]; then
165+ # DNS-01 challenge
166+ local -n acmesh_dns_config=" ACMESH_${cid} _DNS_API_CONFIG"
167+
168+ local acmesh_dns_api=" ${acmesh_dns_config[DNS_API]} "
169+ if [[ -z " $acmesh_dns_api " ]]; then
170+ echo " Error: missing acme.sh DNS API for DNS challenge"
171+ return 1
172+ fi
173+ params_issue_arr+=(--dns " $acmesh_dns_api " )
174+
175+ # Loop over defined variable for acme.sh DNS api config
176+ local -a dns_api_keys
177+ for key in " ${! acmesh_dns_config[@]} " ; do
178+ [[ " $key " == " DNS_API" ]] && continue
179+ dns_api_keys+=(" $key " )
180+ local value=" ${acmesh_dns_config[$key]} "
181+ declare -x " $key " =" $value "
182+ done
183+
184+ echo " Info: DNS challenge using $acmesh_dns_api DNS API with the following keys: ${dns_api_keys[*]} "
185+ else
186+ echo " Error: unknown ACME challenge method: $acme_challenge "
187+ return 1
188+ fi
155189
156190 local -n cert_keysize=" LETSENCRYPT_${cid} _KEYSIZE"
157191 if [[ -z " $cert_keysize " ]] || \
@@ -349,7 +383,7 @@ function update_cert {
349383 # Add all the domains to certificate
350384 params_issue_arr+=(--domain " $domain " )
351385 # If enabled, add location configuration for the domain
352- if parse_true " ${ACME_HTTP_CHALLENGE_LOCATION:= false} " ; then
386+ if [[ " $acme_challenge " == " HTTP-01 " ]] && parse_true " ${ACME_HTTP_CHALLENGE_LOCATION:= false} " ; then
353387 add_location_configuration " $domain " || reload_nginx
354388 fi
355389 done
@@ -361,6 +395,16 @@ function update_cert {
361395
362396 local acmesh_return=$?
363397
398+ # DNS challenge: clean environment variables
399+ if [[ " $acme_challenge " == " DNS-01" ]]; then
400+ local -n acmesh_dns_config=" ACMESH_${cid} _DNS_API_CONFIG"
401+ # Loop over defined variable for acme.sh DNS api config
402+ for key in " ${! acmesh_dns_config[@]} " ; do
403+ [[ " $key " == " DNS_API" ]] && continue
404+ unset " $key "
405+ done
406+ fi
407+
364408 # 0 = success, 2 = RENEW_SKIP
365409 if [[ $acmesh_return == 0 || $acmesh_return == 2 ]]; then
366410 for domain in " ${hosts_array[@]} " ; do
0 commit comments