mirror of
https://github.com/dehydrated-io/dehydrated.git
synced 2026-04-25 09:48:29 +02:00
Add extract_altnames() function
This commit is contained in:
@@ -257,6 +257,36 @@ signed_request() {
|
|||||||
http_request post "${1}" "${data}"
|
http_request post "${1}" "${data}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Extracts all subject names from a CSR
|
||||||
|
# Outputs either the CN, or the SANs, one per line
|
||||||
|
extract_altnames() {
|
||||||
|
csr="${1}" # the CSR itself (not a file)
|
||||||
|
|
||||||
|
if ! <<<"${csr}" openssl req -verify -noout 2>/dev/null; then
|
||||||
|
_exiterr "Certificate signing request isn't valid"
|
||||||
|
fi
|
||||||
|
|
||||||
|
reqtext="$( <<<"${csr}" openssl req -noout -text )"
|
||||||
|
if <<<"$reqtext" grep -q '^[[:space:]]*X509v3 Subject Alternative Name:[[:space:]]*$'; then
|
||||||
|
# SANs used, extract these
|
||||||
|
altnames="$( <<<"${reqtext}" grep -A1 '^[[:space:]]*X509v3 Subject Alternative Name:[[:space:]]*$' | tail -n1 )"
|
||||||
|
# split to one per line:
|
||||||
|
altnames="$( <<<"${altnames}" _sed -e 's/^[[:space:]]*//; s/, /\'$'\n''/' )"
|
||||||
|
# we can only get DNS: ones signed
|
||||||
|
if [ -n "$( <<<"${altnames}" grep -v '^DNS:' )" ]; then
|
||||||
|
_exiterr "Certificate signing request contains non-DNS Subject Alternative Names"
|
||||||
|
fi
|
||||||
|
# strip away the DNS: prefix
|
||||||
|
altnames="$( <<<"${altnames}" _sed -e 's/^DNS://' )"
|
||||||
|
echo "$altnames"
|
||||||
|
|
||||||
|
else
|
||||||
|
# No SANs, extract CN
|
||||||
|
altnames="$( <<<"${reqtext}" grep '^[[:space:]]*Subject:' | _sed -e 's/.* CN=([^ /,]*).*/\1/' )"
|
||||||
|
echo "$altnames"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Create certificate for domain(s) and outputs it FD 3
|
# Create certificate for domain(s) and outputs it FD 3
|
||||||
sign_csr() {
|
sign_csr() {
|
||||||
csr="${1}" # the CSR itself (not a file)
|
csr="${1}" # the CSR itself (not a file)
|
||||||
@@ -269,6 +299,9 @@ sign_csr() {
|
|||||||
|
|
||||||
shift 1 || true
|
shift 1 || true
|
||||||
altnames="${*:-}"
|
altnames="${*:-}"
|
||||||
|
if [ -z "$altnames" ]; then
|
||||||
|
altnames="$( extract_altnames "$csr" )"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -z "${CA_NEW_AUTHZ}" ]] || [[ -z "${CA_NEW_CERT}" ]]; then
|
if [[ -z "${CA_NEW_AUTHZ}" ]] || [[ -z "${CA_NEW_CERT}" ]]; then
|
||||||
_exiterr "Certificate authority doesn't allow certificate signing"
|
_exiterr "Certificate authority doesn't allow certificate signing"
|
||||||
|
|||||||
Reference in New Issue
Block a user