mirror of
https://github.com/dehydrated-io/dehydrated.git
synced 2026-04-21 16:01:20 +02:00
moved deploy_challenge to earlier loop so it works with multiple challenge tokens on the same identifier (important for wildcard certificate), fixed array-name, removed hook-chain warning
This commit is contained in:
@@ -3,7 +3,7 @@ This file contains a log of major changes in dehydrated
|
|||||||
|
|
||||||
## [x.x.x] - xxxx-xx-xx
|
## [x.x.x] - xxxx-xx-xx
|
||||||
## Changed
|
## Changed
|
||||||
- ...
|
- Challenge validation loop has been modified to loop over authorization identifiers instead of altnames (ACMEv2 + wildcard support)
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
- Support for ACME v02 (including wildcard certificates!)
|
- Support for ACME v02 (including wildcard certificates!)
|
||||||
|
|||||||
28
dehydrated
28
dehydrated
@@ -675,7 +675,7 @@ sign_csr() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Gather challenge information
|
# Gather challenge information
|
||||||
challenge_identifier[${idx}]="${identifier}"
|
challenge_identifiers[${idx}]="${identifier}"
|
||||||
challenge_tokens[${idx}]="$(echo "${challenge}" | get_json_string_value token)"
|
challenge_tokens[${idx}]="$(echo "${challenge}" | get_json_string_value token)"
|
||||||
if [[ ${API} -eq 2 ]]; then
|
if [[ ${API} -eq 2 ]]; then
|
||||||
challenge_uris[${idx}]="$(echo "${challenge}" | get_json_string_value url)"
|
challenge_uris[${idx}]="$(echo "${challenge}" | get_json_string_value url)"
|
||||||
@@ -698,6 +698,7 @@ sign_csr() {
|
|||||||
keyauth_hook="$(printf '%s' "${keyauth}" | "${OPENSSL}" dgst -sha256 -binary | urlbase64)"
|
keyauth_hook="$(printf '%s' "${keyauth}" | "${OPENSSL}" dgst -sha256 -binary | urlbase64)"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
keyauths[${idx}]="${keyauth}"
|
keyauths[${idx}]="${keyauth}"
|
||||||
deploy_args[${idx}]="${identifier} ${challenge_tokens[${idx}]} ${keyauth_hook}"
|
deploy_args[${idx}]="${identifier} ${challenge_tokens[${idx}]} ${keyauth_hook}"
|
||||||
|
|
||||||
@@ -706,30 +707,25 @@ sign_csr() {
|
|||||||
local num_pending_challenges=${idx}
|
local num_pending_challenges=${idx}
|
||||||
echo " + ${num_pending_challenges} pending challenge(s)"
|
echo " + ${num_pending_challenges} pending challenge(s)"
|
||||||
|
|
||||||
# Detect duplicate challenge identifiers
|
# Deploy challenge tokens
|
||||||
if [ "${HOOK_CHAIN}" = "yes" ] && [ -n "$(tr ' ' '\n' <<< "${challenge_identifier[*]}" | sort | uniq -d)" ]; then
|
|
||||||
echo "!! Disabling HOOK_CHAIN for this certificate (see https://dehydrated.de/docs/hook_chain.md#problem-with-wildcard-certificates for more information)"
|
|
||||||
HOOK_CHAIN=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Deploy challenge tokens using chained hook
|
|
||||||
if [[ ${num_pending_challenges} -ne 0 ]]; then
|
if [[ ${num_pending_challenges} -ne 0 ]]; then
|
||||||
# shellcheck disable=SC2068
|
echo " + Deploying challenge tokens..."
|
||||||
if [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" = "yes" ]]; then
|
if [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" = "yes" ]]; then
|
||||||
echo " + Deploying challenge tokens..."
|
|
||||||
"${HOOK}" "deploy_challenge" ${deploy_args[@]}
|
"${HOOK}" "deploy_challenge" ${deploy_args[@]}
|
||||||
|
elif [[ -n "${HOOK}" ]]; then
|
||||||
|
# Run hook script to deploy the challenge token
|
||||||
|
local idx=0
|
||||||
|
while [ ${idx} -lt ${num_pending_challenges} ]; do
|
||||||
|
"${HOOK}" "deploy_challenge" ${deploy_args[${idx}]}
|
||||||
|
idx=$((idx+1))
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Validate pending challenges
|
# Validate pending challenges
|
||||||
local idx=0
|
local idx=0
|
||||||
while [ ${idx} -lt ${num_pending_challenges} ]; do
|
while [ ${idx} -lt ${num_pending_challenges} ]; do
|
||||||
echo " + Responding to challenge for ${challenge_identifier[${idx}]} authorization..."
|
echo " + Responding to challenge for ${challenge_identifiers[${idx}]} authorization..."
|
||||||
|
|
||||||
# Run hook script to deploy the challenge token
|
|
||||||
if [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" != "yes" ]]; then
|
|
||||||
"${HOOK}" "deploy_challenge" ${deploy_args[${idx}]}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ask the acme-server to verify our challenge and wait until it is no longer pending
|
# Ask the acme-server to verify our challenge and wait until it is no longer pending
|
||||||
if [[ ${API} -eq 1 ]]; then
|
if [[ ${API} -eq 1 ]]; then
|
||||||
|
|||||||
@@ -60,15 +60,3 @@ HOOK: clean_challenge lukas.im blablabla blablabla.supersecure www.lukas.im blub
|
|||||||
HOOK: deploy_cert lukas.im /etc/dehydrated/certs/lukas.im/privkey.pem /etc/dehydrated/certs/lukas.im/cert.pem /etc/dehydrated/certs/lukas.im/fullchain.pem /etc/dehydrated/certs/lukas.im/chain.pem 1460152408
|
HOOK: deploy_cert lukas.im /etc/dehydrated/certs/lukas.im/privkey.pem /etc/dehydrated/certs/lukas.im/cert.pem /etc/dehydrated/certs/lukas.im/fullchain.pem /etc/dehydrated/certs/lukas.im/chain.pem 1460152408
|
||||||
+ Done!
|
+ Done!
|
||||||
```
|
```
|
||||||
|
|
||||||
# Problem with wildcard certificates
|
|
||||||
|
|
||||||
For wildcard certificates the upper level domain is used for verification, e.g.
|
|
||||||
`*.foo.example.com` will be verified at `foo.example.com`.
|
|
||||||
|
|
||||||
In cases where both `foo.example.com` and `*.foo.example.com` would have to be
|
|
||||||
validated there would be a conflict since both will have different tokens but
|
|
||||||
both are expected to be resolved under `_acme-challenge.foo.example.com`.
|
|
||||||
|
|
||||||
If dehydrated detects this kind of configuration it will automatically fall back
|
|
||||||
to non-chaining behaviour (until the next certificate).
|
|
||||||
|
|||||||
Reference in New Issue
Block a user