#
DAYS=36525
+if [ -z "$OPENSSL_SIGALG" ]; then
+ OPENSSL_SIGALG=sha256
+fi
+
stderr_onerror() {
(
err=$("$@" >&3 2>&1) || {
fi
}
+# Usage: $0 req keyname dn1 dn2 ...
req() {
local key=$1; shift
- local cn=$1; shift
key "$key"
local errs
stderr_onerror \
- openssl req -new -sha256 -key "${key}.pem" \
- -config <(printf "[req]\n%s\n%s\n[dn]\nCN=%s\n" \
- "prompt = no" "distinguished_name = dn" "${cn}")
+ openssl req -new -"${OPENSSL_SIGALG}" -key "${key}.pem" \
+ -config <(printf "[req]\n%s\n%s\n[dn]\n" \
+ "prompt = no" "distinguished_name = dn" "${dn}"
+ for dn in "$@"; do echo "$dn"; done)
}
req_nocn() {
key "$key"
stderr_onerror \
- openssl req -new -sha256 -subj / -key "${key}.pem" \
+ openssl req -new -"${OPENSSL_SIGALG}" -subj / -key "${key}.pem" \
-config <(printf "[req]\n%s\n[dn]\nCN_default =\n" \
"distinguished_name = dn")
}
local exts=$1; shift
stderr_onerror \
- openssl x509 -req -sha256 -out "${cert}.pem" \
+ openssl x509 -req -"${OPENSSL_SIGALG}" -out "${cert}.pem" \
-extfile <(printf "%s\n" "$exts") "$@"
}
local skid="subjectKeyIdentifier = hash"
local akid="authorityKeyIdentifier = keyid"
- exts=$(printf "%s\n%s\n%s\n" "$skid" "$akid" "basicConstraints = CA:true")
+ exts=$(printf "%s\n%s\n%s\n" "$skid" "$akid" "basicConstraints = critical,CA:true")
for eku in "$@"
do
exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku")
done
- csr=$(req "$key" "$cn") || return 1
+ csr=$(req "$key" "CN = $cn") || return 1
echo "$csr" |
cert "$cert" "$exts" -signkey "${key}.pem" -set_serial 1 -days "${DAYS}"
}
local skid="subjectKeyIdentifier = hash"
local akid="authorityKeyIdentifier = keyid"
- exts=$(printf "%s\n%s\n%s\n" "$skid" "$akid" "basicConstraints = CA:true")
+ exts=$(printf "%s\n%s\n%s\n" "$skid" "$akid" "basicConstraints = critical,CA:true")
for eku in "$@"
do
exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku")
done
- csr=$(req "$key" "$cn") || return 1
+ csr=$(req "$key" "CN = $cn") || return 1
echo "$csr" |
cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \
-set_serial 2 -days "${DAYS}"
do
exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku")
done
- csr=$(req "$key" "$cn") || return 1
+ csr=$(req "$key" "CN = $cn") || return 1
echo "$csr" |
cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \
-set_serial 2 -days "${DAYS}"
}
+# Usage: $0 genpc keyname certname eekeyname eecertname pcext1 pcext2 ...
+#
+# Note: takes csr on stdin, so must be used with $0 req like this:
+#
+# $0 req keyname dn | $0 genpc keyname certname eekeyname eecertname pcext ...
+genpc() {
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer:always" \
+ "basicConstraints = CA:false" \
+ "proxyCertInfo = critical, @pcexts";
+ echo "[pcexts]";
+ for x in "$@"; do echo $x; done)
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}"
+}
+
genee() {
local OPTIND=1
local purpose=serverAuth
"basicConstraints = CA:false" \
"extendedKeyUsage = $purpose" \
"subjectAltName = @alts" "DNS=${cn}")
- csr=$(req "$key" "$cn") || return 1
+ csr=$(req "$key" "CN = $cn") || return 1
echo "$csr" |
cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
-set_serial 2 -days "${DAYS}" "$@"
"basicConstraints = CA:false" \
"extendedKeyUsage = serverAuth" \
"subjectAltName = @alts" "DNS=${cn}")
- csr=$(req "$key" "$cn") || return 1
+ csr=$(req "$key" "CN = $cn") || return 1
echo "$csr" |
cert "$cert" "$exts" -signkey "${key}.pem" \
-set_serial 1 -days "${DAYS}" "$@"