Merge pull request #133 from mschmitt/no-smime
Default SAN in server certs, serial randomization
This commit is contained in:
commit
f480de2b77
@ -569,6 +569,18 @@ sign_req() {
|
||||
local req_in="$EASYRSA_PKI/reqs/$2.req"
|
||||
local crt_out="$EASYRSA_PKI/issued/$2.crt"
|
||||
|
||||
# Randomize Serial number
|
||||
local i= serial= check_serial=
|
||||
for i in 1 2 3 4 5; do
|
||||
"$EASYRSA_OPENSSL" rand -hex 16 -out "$EASYRSA_PKI/serial"
|
||||
serial="$(cat "$EASYRSA_PKI/serial")"
|
||||
check_serial="$("$EASYRSA_OPENSSL" ca -config "$EASYRSA_SSL_CONF" -status "$serial" 2>&1)"
|
||||
case "$check_serial" in
|
||||
*"not present in db"*) break ;;
|
||||
*) continue ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Support batch by internal caller:
|
||||
[ "$3" = "batch" ] && local EASYRSA_BATCH=1
|
||||
|
||||
@ -627,6 +639,15 @@ $(display_dn req "$req_in")
|
||||
esac
|
||||
fi
|
||||
|
||||
# If type is server and no subjectAltName was requested,
|
||||
# add one to the extensions file
|
||||
if [[ "$crt_type" == 'server' ]]
|
||||
then
|
||||
echo "$EASYRSA_EXTRA_EXTS" |
|
||||
grep -q subjectAltName ||
|
||||
print $(default_server_san "$req_in")
|
||||
fi
|
||||
|
||||
# Add any advanced extensions supplied by env-var:
|
||||
[ -n "$EASYRSA_EXTRA_EXTS" ] && print "$EASYRSA_EXTRA_EXTS"
|
||||
|
||||
@ -652,17 +673,6 @@ Certificate created at: $crt_out
|
||||
build_full() {
|
||||
verify_ca_init
|
||||
|
||||
local i= serial= check_serial=
|
||||
for i in 1 2 3 4 5; do
|
||||
"$EASYRSA_OPENSSL" rand -hex 16 -out "$EASYRSA_PKI/serial"
|
||||
serial="$(cat "$EASYRSA_PKI/serial")"
|
||||
check_serial="$("$EASYRSA_OPENSSL" ca -config "$EASYRSA_SSL_CONF" -status "$serial" 2>&1)"
|
||||
case "$check_serial" in
|
||||
*"not present in db"*) break ;;
|
||||
*) continue ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# pull filename base:
|
||||
[ -n "$2" ] || die "\
|
||||
Error: didn't find a file base name as the first argument.
|
||||
@ -923,6 +933,22 @@ display_dn() {
|
||||
print "$("$EASYRSA_OPENSSL" $format -in "$path" -noout -subject -nameopt multiline)"
|
||||
} # => display_dn()
|
||||
|
||||
# generate default SAN from req/X509, passed by full pathname
|
||||
default_server_san() {
|
||||
local path="$1"
|
||||
local cn=$(
|
||||
"$EASYRSA_OPENSSL" req -in "$path" -noout -subject -nameopt sep_multiline |
|
||||
awk -F'=' '/^ *CN=/{print $2}'
|
||||
)
|
||||
echo "$cn" | egrep -q '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$'
|
||||
if [[ $? -eq 0 ]]
|
||||
then
|
||||
print "subjectAltName = IP:$cn"
|
||||
else
|
||||
print "subjectAltName = DNS:$cn"
|
||||
fi
|
||||
} # => default_server_san()
|
||||
|
||||
# verify a file seems to be a valid req/X509
|
||||
verify_file() {
|
||||
local format="$1" path="$2"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user