加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
op_test.orig 13.30 KB
一键复制 编辑 原始数据 按行查看 历史
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
#!/bin/sh
#
# Runs operational testing
set -e
usage ()
{
cat << __EOF__
Tests run:
* standard ca [penelope]
* standard server + renew [s01]
* standard server with SAN [s02]
* standard serverClient [s03]
* standard serverClient with SAN [s04]
* standard client + renew [c01]
* standard sign imported server [specter]
* standard sign imported serverClient [heartbleed]
* standard sign imported serverClient with SAN [VORACLE]
* standard sign imported client [meltdown]
* standard sign imported ca [maximilian]
* subca to origin
* subca sign server [specter]
* subca sign serverClient [heartbleed]
* subca sign serverClient with SAN [VORACLE]
* subca sign client [meltdown]
* delete all keys andrevoke all certs on the fly
* generate various CRLs
__EOF__
exit 0
}
init ()
{
ROOT_DIR="$(pwd)"
WORK_DIR="$ROOT_DIR/easyrsa3"
TEMP_DIR="$WORK_DIR/temp"
IGNORE_TEMP=$((IGNORE_TEMP))
if [ -d "$TEMP_DIR" ] && [ $IGNORE_TEMP -eq 0 ]
then
print "Aborted! Temporary directory exists: $TEMP_DIR"
exit 1
else
[ $IGNORE_TEMP -eq 1 ] && rm -rf "$TEMP_DIR" && print "NOTICE: Deleted $TEMP_DIR"
fi
DIE="${DIE:-1}"
S_ERRORS=0
T_ERRORS=0
DELAY=${DELAY:-1}
VERBOSE="${VERBOSE:-0}"
VVERBOSE="${VVERBOSE:-0}"
SHOW_CERT="${SHOW_CERT:-0}"
SAVE_PKI="${SAVE_PKI:-0}"
ERSA_OUT="${ERSA_OUT:-0}"
ERSA_BIN="./easyrsa"
CUSTOM_VARS="${CUSTOM_VARS:-1}"
UNSIGNED_PKI="${UNSIGNED_PKI:-1}"
SYS_SSL_ENABLE="${SYS_SSL_ENABLE:-1}"
SYS_SSL_LIBB="openssl"
BROKEN_PKI="${BROKEN_PKI:-0}"
CUSTOM_OPTS="${CUSTOM_OPTS:-0}"
export DEPS_DIR="$ROOT_DIR/testdeps"
export EASYRSA_CA_EXPIRE="${EASYRSA_CA_EXPIRE:-1}"
export EASYRSA_CERT_EXPIRE="${EASYRSA_CERT_EXPIRE:-1}"
export OPENSSL_ENABLE="${OPENSSL_ENABLE:-0}"
export OPENSSL_BUILD="${OPENSSL_BUILD:-0}"
export OPENSSL_VERSION="${OPENSSL_VERSION:-git}"
export OSSL_LIBB="${OSSL_LIBB:-"$DEPS_DIR/openssl-dev/bin/openssl"}"
export CUST_SSL_ENABLE="${CUST_SSL_ENABLE:-0}"
export CUST_SSL_LIBB="${CUST_SSL_LIBB:-"$DEPS_DIR/cust-ssl-inst/bin/openssl"}"
export LIBRESSL_ENABLE="${LIBRESSL_ENABLE:-0}"
export LIBRESSL_BUILD="${LIBRESSL_BUILD:-0}"
export LIBRESSL_VERSION="${LIBRESSL_VERSION:-2.8.3}"
export LSSL_LIBB="${LSSL_LIBB:-"$DEPS_DIR/libressl/usr/local/bin/openssl"}"
}
# Wrapper around printf - clobber print since it's not POSIX anyway
print() { printf "%s\n" "$1"; }
newline ()
{
[ $((VVERBOSE + SHOW_CERT_ONLY)) -eq 0 ] && return 0
if [ "$1" = "1" ]
then
print "|| ============================================================================"
else
[ $((ERSA_OUT)) -ne 1 ] || print
fi
}
verbose ()
{
# currently not used
[ $((VERBOSE)) -eq 1 ] || return 0
print "$1 .. ok"
}
completed ()
{
[ $((VERBOSE)) -eq 1 ] || return 0
MSG="$(print "$1" | sed -e s/^--.*0\ //g -e s\`/.*/\`\`g -e s/nopass//g)"
print "$MSG .. ok"
}
warn ()
{
print "|| >> $1"
}
die ()
{
warn "$0 FATAL ERROR! exit 1: $1"
[ $((DIE)) -eq 1 ] && tear_down && exit 1
warn "Ignored"
S_ERRORS=$((S_ERRORS + 1))
T_ERRORS=$((T_ERRORS + 1))
warn "$STAGE_NAME Errors: $S_ERRORS"
return 0
}
vverbose ()
{
[ $((VVERBOSE)) -eq 1 ] || return 0
MSG="$(print "$1" | sed -e s/^--.*0\ //g -e s\`/.*/\`\`g -e s/nopass//g)"
print "|| :: $MSG"
}
vvverbose ()
{
[ $((VVERBOSE)) -eq 1 ] || return 0
print "|| :: $1"
}
vdisabled ()
{
[ $((VVERBOSE)) -eq 1 ] || return 0
print "|| -- DISABLED OPTION: $1"
}
vcompleted ()
{
[ $((VVERBOSE)) -eq 1 ] || return 0
MSG="$(print "$1" | sed -e s/^--.*0\ //g -e s\`/.*/\`\`g -e s/nopass//g)"
print "|| ++ $MSG .. ok"
}
verb_on ()
{
VERBOSE="$SAVE_VERB"
VVERBOSE="$SAVE_VVERB"
ERSA_OUT="$SAVE_EOUT"
}
verb_off ()
{
SAVE_VERB="$VERBOSE"
VERBOSE=0
SAVE_VVERB="$VVERBOSE"
VVERBOSE=0
SAVE_EOUT="$ERSA_OUT"
ERSA_OUT=0
}
wait_sec ()
{
( sleep "$DELAY" 2>/dev/null ) || { ( ping -n 1 127.0.0.1 2>/dev/null ) && ping -n "$DELAY" 127.0.0.1; }
}
setup ()
{
newline 1
vverbose "Setup"
cd "$WORK_DIR" || die "cd $WORK_DIR"
vvverbose "Working dir: $WORK_DIR"
destroy_data
STEP_NAME="vars"
if [ $((CUSTOM_VARS)) -eq 1 ]
then
[ -f "$WORK_DIR/vars.example" ] || dir "File missing: $WORK_DIR/vars.example"
cp "$WORK_DIR/vars.example" "$WORK_DIR/vars" || die "cp vars.example vars"
create_vars >> "$WORK_DIR/vars" || die "create_vars"
vcompleted "$STEP_NAME"
else
vdisabled "$STEP_NAME"
fi
STEP_NAME="Custom opts"
if [ $((CUSTOM_OPTS)) -eq 1 ]
then
# https://github.com/OpenVPN/easy-rsa/pull/278
export CUSTOM_EASYRSA_REQ_ORG2="Custom Option"
export LIBRESSL_ENABLE=0
YACF="$WORK_DIR/openssl-easyrsa.cnf"
[ -f "$YACF" ] || die "File missing: $YACF"
[ -f "$YACF.orig" ] && die "Aborted! Temporary file exists: $YACF.orig"
mv "$YACF" "$YACF.orig"
create_custom_opts > "$YACF"
vcompleted "$STEP_NAME"
fi
STAGE_NAME="Sample requests"
if [ $((UNSIGNED_PKI)) -eq 1 ] && [ $((SYS_SSL_ENABLE + CUST_SSL_ENABLE + OPENSSL_ENABLE + LIBRESSL_ENABLE)) -ne 0 ]
then
verb_off
NEW_PKI="pki-req"
create_req || die "$STAGE_NAME create_req"
mv "$TEMP_DIR/$NEW_PKI" "$TEMP_DIR/pki-bkp" || die "$STAGE_NAME mv"
verb_on
vcompleted "$STAGE_NAME"
else
vdisabled "$STAGE_NAME"
fi
completed "Setup"
}
destroy_data ()
{
[ $((SAVE_PKI)) -ne 1 ] && rm -rf "$TEMP_DIR"
rm -f "$WORK_DIR/vars"
if [ -f "$YACF.orig" ]
then
mv -f "$YACF.orig" "$YACF"
fi
}
secure_key ()
{
rm -f "$EASYRSA_PKI/private/$REQ_name.key"
}
tear_down ()
{
destroy_data
cd ..
}
create_vars ()
{
print ' set_var EASYRSA_DN "org"'
print '# Unsupported characters:'
print '# `'
print '# $'
print '# "'
print "# '"
print '# #'
print '# & (Win)'
print ' set_var EASYRSA_REQ_COUNTRY "00"'
print ' set_var EASYRSA_REQ_PROVINCE "test"'
print ' set_var EASYRSA_REQ_CITY "TEST ,./<> ?;:@~ []!%^ *()-= _+| (23) TEST"'
print ' set_var EASYRSA_REQ_ORG "example.org"'
print ' set_var EASYRSA_REQ_EMAIL "me@example.net"'
print ' set_var EASYRSA_REQ_OU "TEST esc \{ \} \£ \¬ (4) TEST"'
}
create_custom_opts ()
{
head -n 91 "$YACF.orig"
print "1.organizationName = Second Organization Name"
print "1.organizationName_default = \$ENV::CUSTOM_EASYRSA_REQ_ORG2"
tail -n +91 "$YACF.orig"
}
create_req ()
{
export EASYRSA_PKI="$TEMP_DIR/$NEW_PKI"
STEP_NAME="init-pki"
action
export EASYRSA_BATCH=1
export EASYRSA_REQ_CN="maximilian"
STEP_NAME="build-ca nopass subca"
action
[ -f "$EASYRSA_PKI/reqs/ca.req" ] && mv "$EASYRSA_PKI/reqs/ca.req" "$EASYRSA_PKI/reqs/maximilian.req"
export EASYRSA_REQ_CN="specter"
STEP_NAME="gen-req $EASYRSA_REQ_CN nopass"
action
secure_key
export EASYRSA_REQ_CN="meltdown"
STEP_NAME="gen-req $EASYRSA_REQ_CN nopass"
action
secure_key
export EASYRSA_REQ_CN="heartbleed"
STEP_NAME="gen-req $EASYRSA_REQ_CN nopass"
action
secure_key
# SAN will be lost
#verb_on
export EASYRSA_REQ_CN="VORACLE"
STEP_NAME="--subject-alt-name='DNS:www.example.org,IP:0.0.0.0' gen-req $EASYRSA_REQ_CN nopass"
action
secure_key
STEP_NAME="show-req $EASYRSA_REQ_CN nopass"
action
#verb_off
unset EASYRSA_REQ_CN
unset EASYRSA_BATCH
}
restore_req ()
{
STEP_NAME="Restore sample requests"
rm -rf "$TEMP_DIR/pki-req"
cp -Rf "$TEMP_DIR/pki-bkp" "$TEMP_DIR/pki-req" >/dev/null 2>&1 || die "$STEP_NAME"
vcompleted "$STEP_NAME"
}
move_ca ()
{
newline 1
STEP_NAME="Send ca to origin"
mv "$EASYRSA_PKI/issued/$REQ_name.crt" "$TEMP_DIR/pki-req/ca.crt" >/dev/null 2>&1 || die "$STEP_NAME"
completed "$STEP_NAME"
vcompleted "$STEP_NAME"
STEP_NAME="Change PKI to origin"
export EASYRSA_PKI="$TEMP_DIR/pki-req"
completed "$STEP_NAME"
vcompleted "$STEP_NAME"
}
action ()
{
vverbose "$STEP_NAME"
if [ $((ERSA_OUT + SHOW_CERT_ONLY)) -eq 0 ]
then
newline
# shellcheck disable=SC2086
"$ERSA_BIN" $STEP_NAME >/dev/null 2>&1 || die "$STEP_NAME"
else
# shellcheck disable=SC2086
"$ERSA_BIN" $STEP_NAME || die "$STEP_NAME"
fi
completed "$STEP_NAME"
}
init_pki ()
{
STEP_NAME="init-pki"
action
}
build_ca ()
{
STEP_NAME="build-ca nopass"
export EASYRSA_REQ_CN="penelope"
action
unset EASYRSA_REQ_CN
}
show_ca ()
{
STEP_NAME="show-ca"
[ $((SHOW_CERT)) -eq 1 ] && SHOW_CERT_ONLY=1
action
newline
unset SHOW_CERT_ONLY
}
build_full ()
{
newline 1
STEP_NAME="build-$REQ_type-full $REQ_name nopass"
action
secure_key
}
build_san_full ()
{
newline 1
STEP_NAME="--subject-alt-name=DNS:www.example.org,IP:0.0.0.0 build-$REQ_type-full $REQ_name nopass"
action
secure_key
}
import_req ()
{
REQ_file="$TEMP_DIR/pki-req/reqs/$REQ_name.req"
# Note: easyrsa still appears to work in batch mode for this action ?
export EASYRSA_BATCH=0
newline 1
STEP_NAME="import-req $REQ_file $REQ_name"
action
export EASYRSA_BATCH=1
}
show_req ()
{
STEP_NAME="show-req $REQ_name"
[ $((SHOW_CERT)) -eq 1 ] && SHOW_CERT_ONLY=1
action
newline
unset SHOW_CERT_ONLY
}
sign_req ()
{
newline 1
STEP_NAME="sign-req $REQ_type $REQ_name nopass"
action
}
show_cert ()
{
STEP_NAME="show-cert $REQ_name"
[ $((SHOW_CERT)) -eq 1 ] && SHOW_CERT_ONLY=1
action
newline
unset SHOW_CERT_ONLY
}
renew_cert ()
{
newline 1
STEP_NAME="renew $REQ_name nopass"
action
}
revoke_cert ()
{
STEP_NAME="revoke $REQ_name"
CAT_THIS="$EASYRSA_PKI/index.txt"
verb_off
action
verb_on
}
gen_crl ()
{
newline 1
STEP_NAME="gen-crl"
action
CAT_THIS="$EASYRSA_PKI/crl.pem"
cat_file
}
cat_file ()
{
[ $((ERSA_OUT)) -eq 1 ] || return 0
newline
vverbose "cat $CAT_THIS"
newline
[ -f "$CAT_THIS" ] || die "cat $CAT_THIS"
[ $((VVERBOSE)) -eq 1 ] && [ -f "$CAT_THIS" ] && cat "$CAT_THIS"
newline
}
create_pki ()
{
newline 1
vverbose "$STAGE_NAME"
vvverbose "EASYRSA_OPENSSL: $EASYRSA_OPENSSL"
verbose "$($EASYRSA_OPENSSL version 2> /dev/null)"
vverbose "$($EASYRSA_OPENSSL version 2> /dev/null)"
restore_req
export EASYRSA_PKI="$TEMP_DIR/$NEW_PKI"
if [ "$EASYRSA_PKI" = "$TEMP_DIR/pki-empty" ] || [ "$EASYRSA_PKI" = "$TEMP_DIR/pki-error" ]
then
vverbose "OMITTING init-pki"
else
init_pki
fi
export EASYRSA_BATCH=1
build_ca
show_ca
REQ_type="server"
REQ_name="s01"
build_full
show_cert
wait_sec "$DELAY"
renew_cert
show_cert
revoke_cert
REQ_type="server"
REQ_name="s02"
build_san_full
show_cert
wait_sec "$DELAY"
renew_cert
show_cert
revoke_cert
REQ_type="serverClient"
REQ_name="s03"
build_full
show_cert
wait_sec "$DELAY"
renew_cert
show_cert
revoke_cert
REQ_type="serverClient"
REQ_name="s04"
build_san_full
show_cert
wait_sec "$DELAY"
renew_cert
show_cert
revoke_cert
REQ_type="client"
REQ_name="c01"
build_full
show_cert
wait_sec "$DELAY"
renew_cert
show_cert
revoke_cert
REQ_type="server"
REQ_name="specter"
import_req
sign_req
show_cert
revoke_cert
REQ_type="serverClient"
REQ_name="heartbleed"
import_req
sign_req
show_cert
revoke_cert
# SAN is lost.
REQ_type="serverClient"
REQ_name="VORACLE"
import_req
sign_req
show_cert
revoke_cert
REQ_type="client"
REQ_name="meltdown"
import_req
sign_req
show_cert
revoke_cert
gen_crl
REQ_type="ca"
REQ_name="maximilian"
import_req
sign_req
# goto origin
move_ca
show_ca
REQ_type="server"
REQ_name="specter"
sign_req
show_cert
revoke_cert
REQ_type="serverClient"
REQ_name="heartbleed"
sign_req
show_cert
revoke_cert
REQ_type="serverClient"
REQ_name="VORACLE"
sign_req
show_cert
revoke_cert
REQ_type="client"
REQ_name="meltdown"
sign_req
show_cert
revoke_cert
gen_crl
unset EASYRSA_BATCH
unset EASYRSA_PKI
newline 1
vcompleted "$STAGE_NAME (Errors: $S_ERRORS)"
S_ERRORS=0
newline 1
}
######################################
for i in $1
do
case $i in
-u|-h|--help) usage ;;
-v) VERBOSE=1 ;;
-vv) VVERBOSE=1; ERSA_OUT="${ERSA_OUT:-1}" ;;
-b) DIE=0; BROKEN_PKI=1; SYS_SSL_ENABLE="${SYS_SSL_ENABLE:-0}";
VVERBOSE="${VVERBOSE:-1}"; ERSA_OUT="${ERSA_OUT:-1}" ;;
-f) DIE=0; CUST_SSL_ENABLE=1; OPENSSL_ENABLE=1; LIBRESSL_ENABLE=1;
VVERBOSE="${VVERBOSE:-1}"; ERSA_OUT="${ERSA_OUT:-1}" ;;
*) print "Unknown option: $i"; exit 1 ;;
esac
done
init
#[ -f "$DEPS_DIR/custom-ssl.sh" ] || export CUST_SSL_ENABLE=0
#[ $((CUST_SSL_ENABLE)) -eq 1 ] && "$DEPS_DIR/custom-ssl.sh"
#[ -f "$DEPS_DIR/openssl.sh" ] || export OPENSSL_ENABLE=0
#[ $((OPENSSL_ENABLE)) -eq 1 ] && "$DEPS_DIR/openssl.sh"
#[ -f "$DEPS_DIR/libressl.sh" ] || export LIBRESSL_ENABLE=0
#[ $((LIBRESSL_ENABLE)) -eq 1 ] && "$DEPS_DIR/libressl.sh"
setup
STAGE_NAME="System ssl"
if [ $((SYS_SSL_ENABLE)) -eq 1 ]
then
export EASYRSA_OPENSSL="$SYS_SSL_LIBB"
NEW_PKI="pki-sys-ssl"
create_pki
else
vdisabled "$STAGE_NAME"
fi
STAGE_NAME="Custom ssl"
if [ $((CUST_SSL_ENABLE)) -eq 1 ]
then
[ -f "$CUST_SSL_LIBB" ] || die "$0: missing custom ssl: $CUST_SSL_LIBB"
export EASYRSA_OPENSSL="$CUST_SSL_LIBB"
NEW_PKI="pki-custom-ssl"
create_pki
unset EASYRSA_OPENSSL
else
vdisabled "$STAGE_NAME"
fi
STAGE_NAME="Openssl"
if [ $((OPENSSL_ENABLE)) -eq 1 ]
then
[ -f "$OSSL_LIBB" ] || die "$0: missing openssl: $OSSL_LIBB"
export EASYRSA_OPENSSL="$OSSL_LIBB"
NEW_PKI="pki-openssl"
create_pki
unset EASYRSA_OPENSSL
else
vdisabled "$STAGE_NAME"
fi
STAGE_NAME="Libressl"
if [ $((LIBRESSL_ENABLE)) -eq 1 ]
then
[ -f "$LSSL_LIBB" ] || die "$0: missing libressl: $LSSL_LIBB"
export EASYRSA_OPENSSL="$LSSL_LIBB"
NEW_PKI="pki-libressl"
create_pki
unset EASYRSA_OPENSSL
else
vdisabled "$STAGE_NAME"
fi
STAGE_NAME="Common errors (Does *not* die on errors)"
if [ $((BROKEN_PKI)) -eq 1 ]
then
NEW_PKI="pki-empty"
#restore_req
DIE=0 create_pki
else
vdisabled "$STAGE_NAME"
fi
tear_down
completed "Completed (Total errors: $T_ERRORS)"
vcompleted "Completed (Total errors: $T_ERRORS)"
exit 0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化