mirror of
git://anongit.mindrot.org/openssh.git
synced 2024-12-25 11:22:10 +00:00
- djm@cvs.openbsd.org 2013/01/18 00:45:29
[regress/Makefile regress/cert-userkey.sh regress/krl.sh] Tests for Key Revocation Lists (KRLs)
This commit is contained in:
parent
f3747bf401
commit
ebafebda85
@ -8,6 +8,10 @@
|
|||||||
a single bit of incremental cost to revoke a certificate by serial number.
|
a single bit of incremental cost to revoke a certificate by serial number.
|
||||||
KRLs are loaded via the existing RevokedKeys sshd_config option.
|
KRLs are loaded via the existing RevokedKeys sshd_config option.
|
||||||
feedback and ok markus@
|
feedback and ok markus@
|
||||||
|
- OpenBSD CVS Sync
|
||||||
|
- djm@cvs.openbsd.org 2013/01/18 00:45:29
|
||||||
|
[regress/Makefile regress/cert-userkey.sh regress/krl.sh]
|
||||||
|
Tests for Key Revocation Lists (KRLs)
|
||||||
|
|
||||||
20130117
|
20130117
|
||||||
- (djm) [regress/cipher-speed.sh regress/integrity.sh regress/try-ciphers.sh]
|
- (djm) [regress/cipher-speed.sh regress/integrity.sh regress/try-ciphers.sh]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile,v 1.61 2012/12/11 22:42:11 markus Exp $
|
# $OpenBSD: Makefile,v 1.62 2013/01/18 00:45:29 djm Exp $
|
||||||
|
|
||||||
REGRESS_TARGETS= t1 t2 t3 t4 t5 t6 t7 t8 t9 t-exec
|
REGRESS_TARGETS= t1 t2 t3 t4 t5 t6 t7 t8 t9 t-exec
|
||||||
tests: prereq $(REGRESS_TARGETS)
|
tests: prereq $(REGRESS_TARGETS)
|
||||||
@ -60,7 +60,8 @@ LTESTS= connect \
|
|||||||
host-expand \
|
host-expand \
|
||||||
keys-command \
|
keys-command \
|
||||||
forward-control \
|
forward-control \
|
||||||
integrity
|
integrity \
|
||||||
|
krl
|
||||||
|
|
||||||
INTEROP_TESTS= putty-transfer putty-ciphers putty-kex conch-ciphers
|
INTEROP_TESTS= putty-transfer putty-ciphers putty-kex conch-ciphers
|
||||||
#INTEROP_TESTS+=ssh-com ssh-com-client ssh-com-keygen ssh-com-sftp
|
#INTEROP_TESTS+=ssh-com ssh-com-client ssh-com-keygen ssh-com-sftp
|
||||||
@ -77,11 +78,11 @@ CLEANFILES= t2.out t3.out t6.out1 t6.out2 t7.out t7.out.pub copy.1 copy.2 \
|
|||||||
ls.copy banner.in banner.out empty.in \
|
ls.copy banner.in banner.out empty.in \
|
||||||
scp-ssh-wrapper.scp ssh_proxy_envpass remote_pid \
|
scp-ssh-wrapper.scp ssh_proxy_envpass remote_pid \
|
||||||
sshd_proxy_bak rsa_ssh2_cr.prv rsa_ssh2_crnl.prv \
|
sshd_proxy_bak rsa_ssh2_cr.prv rsa_ssh2_crnl.prv \
|
||||||
known_hosts-cert host_ca_key* cert_host_key* \
|
known_hosts-cert host_ca_key* cert_host_key* cert_user_key* \
|
||||||
putty.rsa2 sshd_proxy_orig ssh_proxy_bak \
|
putty.rsa2 sshd_proxy_orig ssh_proxy_bak \
|
||||||
key.rsa-* key.dsa-* key.ecdsa-* \
|
key.rsa-* key.dsa-* key.ecdsa-* \
|
||||||
authorized_principals_${USER} expect actual ready \
|
authorized_principals_${USER} expect actual ready \
|
||||||
sshd_proxy.* authorized_keys_${USER}.* modpipe
|
sshd_proxy.* authorized_keys_${USER}.* modpipe revoked-* krl-*
|
||||||
|
|
||||||
|
|
||||||
# Enable all malloc(3) randomisations and checks
|
# Enable all malloc(3) randomisations and checks
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: cert-userkey.sh,v 1.9 2012/10/19 05:10:42 djm Exp $
|
# $OpenBSD: cert-userkey.sh,v 1.10 2013/01/18 00:45:29 djm Exp $
|
||||||
# Placed in the Public Domain.
|
# Placed in the Public Domain.
|
||||||
|
|
||||||
tid="certified user keys"
|
tid="certified user keys"
|
||||||
@ -184,14 +184,32 @@ basic_tests() {
|
|||||||
(
|
(
|
||||||
cat $OBJ/sshd_proxy_bak
|
cat $OBJ/sshd_proxy_bak
|
||||||
echo "UsePrivilegeSeparation $privsep"
|
echo "UsePrivilegeSeparation $privsep"
|
||||||
echo "RevokedKeys $OBJ/cert_user_key_${ktype}.pub"
|
echo "RevokedKeys $OBJ/cert_user_key_revoked"
|
||||||
echo "$extra_sshd"
|
echo "$extra_sshd"
|
||||||
) > $OBJ/sshd_proxy
|
) > $OBJ/sshd_proxy
|
||||||
|
cp $OBJ/cert_user_key_${ktype}.pub \
|
||||||
|
$OBJ/cert_user_key_revoked
|
||||||
${SSH} -2i $OBJ/cert_user_key_${ktype} \
|
${SSH} -2i $OBJ/cert_user_key_${ktype} \
|
||||||
-F $OBJ/ssh_proxy somehost true >/dev/null 2>&1
|
-F $OBJ/ssh_proxy somehost true >/dev/null 2>&1
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
fail "ssh cert connect succeeded unexpecedly"
|
fail "ssh cert connect succeeded unexpecedly"
|
||||||
fi
|
fi
|
||||||
|
verbose "$tid: ${_prefix} revoked via KRL"
|
||||||
|
rm $OBJ/cert_user_key_revoked
|
||||||
|
${SSHKEYGEN} -kqf $OBJ/cert_user_key_revoked \
|
||||||
|
$OBJ/cert_user_key_${ktype}.pub
|
||||||
|
${SSH} -2i $OBJ/cert_user_key_${ktype} \
|
||||||
|
-F $OBJ/ssh_proxy somehost true >/dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
fail "ssh cert connect succeeded unexpecedly"
|
||||||
|
fi
|
||||||
|
verbose "$tid: ${_prefix} empty KRL"
|
||||||
|
${SSHKEYGEN} -kqf $OBJ/cert_user_key_revoked
|
||||||
|
${SSH} -2i $OBJ/cert_user_key_${ktype} \
|
||||||
|
-F $OBJ/ssh_proxy somehost true >/dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
fail "ssh cert connect failed"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Revoked CA
|
# Revoked CA
|
||||||
|
151
regress/krl.sh
Normal file
151
regress/krl.sh
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# $OpenBSD: krl.sh,v 1.1 2013/01/18 00:45:29 djm Exp $
|
||||||
|
# Placed in the Public Domain.
|
||||||
|
|
||||||
|
tid="key revocation lists"
|
||||||
|
|
||||||
|
# Do most testing with ssh-keygen; it uses the same verification code as sshd.
|
||||||
|
|
||||||
|
# Old keys will interfere with ssh-keygen.
|
||||||
|
rm -f $OBJ/revoked-* $OBJ/krl-*
|
||||||
|
|
||||||
|
# Generate a CA key
|
||||||
|
$SSHKEYGEN -t ecdsa -f $OBJ/revoked-ca -C "" -N "" > /dev/null ||
|
||||||
|
fatal "$SSHKEYGEN CA failed"
|
||||||
|
|
||||||
|
# A specification that revokes some certificates by serial numbers
|
||||||
|
# The serial pattern is chosen to ensure the KRL includes list, range and
|
||||||
|
# bitmap sections.
|
||||||
|
cat << EOF >> $OBJ/revoked-serials
|
||||||
|
serial: 1-4
|
||||||
|
serial: 10
|
||||||
|
serial: 15
|
||||||
|
serial: 30
|
||||||
|
serial: 50
|
||||||
|
serial: 999
|
||||||
|
# The following sum to 500-799
|
||||||
|
serial: 500
|
||||||
|
serial: 501
|
||||||
|
serial: 502
|
||||||
|
serial: 503-600
|
||||||
|
serial: 700-797
|
||||||
|
serial: 798
|
||||||
|
serial: 799
|
||||||
|
serial: 599-701
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# A specification that revokes some certificated by key ID.
|
||||||
|
touch $OBJ/revoked-keyid
|
||||||
|
for n in 1 2 3 4 10 15 30 50 `jot 500 300` 999 1000 1001 1002; do
|
||||||
|
# Fill in by-ID revocation spec.
|
||||||
|
echo "id: revoked $n" >> $OBJ/revoked-keyid
|
||||||
|
done
|
||||||
|
|
||||||
|
keygen() {
|
||||||
|
N=$1
|
||||||
|
f=$OBJ/revoked-`printf "%04d" $N`
|
||||||
|
# Vary the keytype. We use mostly ECDSA since this is fastest by far.
|
||||||
|
keytype=ecdsa
|
||||||
|
case $N in
|
||||||
|
2 | 10 | 510 | 1001) keytype=rsa;;
|
||||||
|
4 | 30 | 520 | 1002) keytype=dsa;;
|
||||||
|
esac
|
||||||
|
$SSHKEYGEN -t $keytype -f $f -C "" -N "" > /dev/null \
|
||||||
|
|| fatal "$SSHKEYGEN failed"
|
||||||
|
# Sign cert
|
||||||
|
$SSHKEYGEN -s $OBJ/revoked-ca -z $n -I "revoked $N" $f >/dev/null 2>&1 \
|
||||||
|
|| fatal "$SSHKEYGEN sign failed"
|
||||||
|
echo $f
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate some keys.
|
||||||
|
verbose "$tid: generating test keys"
|
||||||
|
REVOKED_SERIALS="1 4 10 50 500 510 520 799 999"
|
||||||
|
for n in $REVOKED_SERIALS ; do
|
||||||
|
f=`keygen $n`
|
||||||
|
REVOKED_KEYS="$REVOKED_KEYS ${f}.pub"
|
||||||
|
REVOKED_CERTS="$REVOKED_CERTS ${f}-cert.pub"
|
||||||
|
done
|
||||||
|
NOTREVOKED_SERIALS="5 9 14 16 29 30 49 51 499 800 1000 1001"
|
||||||
|
NOTREVOKED=""
|
||||||
|
for n in $NOTREVOKED_SERIALS ; do
|
||||||
|
NOTREVOKED_KEYS="$NOTREVOKED_KEYS ${f}.pub"
|
||||||
|
NOTREVOKED_CERTS="$NOTREVOKED_CERTS ${f}-cert.pub"
|
||||||
|
done
|
||||||
|
|
||||||
|
genkrls() {
|
||||||
|
OPTS=$1
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-empty - </dev/null \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-keys $REVOKED_KEYS \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-cert $REVOKED_CERTS \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-all $REVOKED_KEYS $REVOKED_CERTS \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-ca $OBJ/revoked-ca.pub \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
# KRLs from serial/key-id spec need the CA specified.
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-serial $OBJ/revoked-serials \
|
||||||
|
>/dev/null 2>&1 && fatal "$SSHKEYGEN KRL succeeded unexpectedly"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-keyid $OBJ/revoked-keyid \
|
||||||
|
>/dev/null 2>&1 && fatal "$SSHKEYGEN KRL succeeded unexpectedly"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-serial -s $OBJ/revoked-ca $OBJ/revoked-serials \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
$SSHKEYGEN $OPTS -kf $OBJ/krl-keyid -s $OBJ/revoked-ca.pub $OBJ/revoked-keyid \
|
||||||
|
>/dev/null || fatal "$SSHKEYGEN KRL failed"
|
||||||
|
}
|
||||||
|
|
||||||
|
verbose "$tid: generating KRLs"
|
||||||
|
genkrls
|
||||||
|
|
||||||
|
check_krl() {
|
||||||
|
KEY=$1
|
||||||
|
KRL=$2
|
||||||
|
EXPECT_REVOKED=$3
|
||||||
|
TAG=$4
|
||||||
|
$SSHKEYGEN -Qf $KRL $KEY >/dev/null
|
||||||
|
result=$?
|
||||||
|
if test "x$EXPECT_REVOKED" = "xyes" -a $result -eq 0 ; then
|
||||||
|
fatal "key $KEY not revoked by KRL $KRL: $TAG"
|
||||||
|
elif test "x$EXPECT_REVOKED" = "xno" -a $result -ne 0 ; then
|
||||||
|
fatal "key $KEY unexpectedly revoked by KRL $KRL: $TAG"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
test_all() {
|
||||||
|
FILES=$1
|
||||||
|
TAG=$2
|
||||||
|
KEYS_RESULT=$3
|
||||||
|
ALL_RESULT=$4
|
||||||
|
SERIAL_RESULT=$5
|
||||||
|
KEYID_RESULT=$6
|
||||||
|
CERTS_RESULT=$7
|
||||||
|
CA_RESULT=$8
|
||||||
|
verbose "$tid: checking revocations for $TAG"
|
||||||
|
for f in $FILES ; do
|
||||||
|
check_krl $f $OBJ/krl-empty no "$TAG"
|
||||||
|
check_krl $f $OBJ/krl-keys $KEYS_RESULT "$TAG"
|
||||||
|
check_krl $f $OBJ/krl-all $ALL_RESULT "$TAG"
|
||||||
|
check_krl $f $OBJ/krl-serial $SERIAL_RESULT "$TAG"
|
||||||
|
check_krl $f $OBJ/krl-keyid $KEYID_RESULT "$TAG"
|
||||||
|
check_krl $f $OBJ/krl-cert $CERTS_RESULT "$TAG"
|
||||||
|
check_krl $f $OBJ/krl-ca $CA_RESULT "$TAG"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
# keys all serial keyid certs CA
|
||||||
|
test_all "$REVOKED_KEYS" "revoked keys" yes yes no no no no
|
||||||
|
test_all "$UNREVOKED_KEYS" "unrevoked keys" no no no no no no
|
||||||
|
test_all "$REVOKED_CERTS" "revoked certs" yes yes yes yes yes yes
|
||||||
|
test_all "$UNREVOKED_CERTS" "unrevoked certs" no no no no no yes
|
||||||
|
|
||||||
|
# Check update. Results should be identical.
|
||||||
|
verbose "$tid: testing KRL update"
|
||||||
|
for f in $OBJ/krl-keys $OBJ/krl-cert $OBJ/krl-all \
|
||||||
|
$OBJ/krl-ca $OBJ/krl-serial $OBJ/krl-keyid ; do
|
||||||
|
cp -f $OBJ/krl-empty $f
|
||||||
|
genkrls -u
|
||||||
|
done
|
||||||
|
# keys all serial keyid certs CA
|
||||||
|
test_all "$REVOKED_KEYS" "revoked keys" yes yes no no no no
|
||||||
|
test_all "$UNREVOKED_KEYS" "unrevoked keys" no no no no no no
|
||||||
|
test_all "$REVOKED_CERTS" "revoked certs" yes yes yes yes yes yes
|
||||||
|
test_all "$UNREVOKED_CERTS" "unrevoked certs" no no no no no yes
|
Loading…
Reference in New Issue
Block a user