xref: /freebsd/crypto/openssh/regress/multipubkey.sh (revision bc5531debefeb54993d01d4f3c8b33ccbe0b4d95)
1*bc5531deSDag-Erling Smørgrav#	$OpenBSD: multipubkey.sh,v 1.1 2014/12/22 08:06:03 djm Exp $
2*bc5531deSDag-Erling Smørgrav#	Placed in the Public Domain.
3*bc5531deSDag-Erling Smørgrav
4*bc5531deSDag-Erling Smørgravtid="multiple pubkey"
5*bc5531deSDag-Erling Smørgrav
6*bc5531deSDag-Erling Smørgravrm -f $OBJ/authorized_keys_$USER $OBJ/user_ca_key* $OBJ/user_key*
7*bc5531deSDag-Erling Smørgravrm -f $OBJ/authorized_principals_$USER $OBJ/cert_user_key*
8*bc5531deSDag-Erling Smørgrav
9*bc5531deSDag-Erling Smørgravmv $OBJ/sshd_proxy $OBJ/sshd_proxy.orig
10*bc5531deSDag-Erling Smørgravmv $OBJ/ssh_proxy $OBJ/ssh_proxy.orig
11*bc5531deSDag-Erling Smørgrav
12*bc5531deSDag-Erling Smørgrav# Create a CA key
13*bc5531deSDag-Erling Smørgrav${SSHKEYGEN} -q -N '' -t ed25519  -f $OBJ/user_ca_key ||\
14*bc5531deSDag-Erling Smørgrav	fatal "ssh-keygen failed"
15*bc5531deSDag-Erling Smørgrav
16*bc5531deSDag-Erling Smørgrav# Make some keys and a certificate.
17*bc5531deSDag-Erling Smørgrav${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_key1 || \
18*bc5531deSDag-Erling Smørgrav	fatal "ssh-keygen failed"
19*bc5531deSDag-Erling Smørgrav${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_key2 || \
20*bc5531deSDag-Erling Smørgrav	fatal "ssh-keygen failed"
21*bc5531deSDag-Erling Smørgrav${SSHKEYGEN} -q -s $OBJ/user_ca_key -I "regress user key for $USER" \
22*bc5531deSDag-Erling Smørgrav	-z $$ -n ${USER},mekmitasdigoat $OBJ/user_key1 ||
23*bc5531deSDag-Erling Smørgrav		fail "couldn't sign user_key1"
24*bc5531deSDag-Erling Smørgrav# Copy the private key alongside the cert to allow better control of when
25*bc5531deSDag-Erling Smørgrav# it is offered.
26*bc5531deSDag-Erling Smørgravmv $OBJ/user_key1-cert.pub $OBJ/cert_user_key1.pub
27*bc5531deSDag-Erling Smørgravcp -p $OBJ/user_key1 $OBJ/cert_user_key1
28*bc5531deSDag-Erling Smørgrav
29*bc5531deSDag-Erling Smørgravgrep -v IdentityFile $OBJ/ssh_proxy.orig > $OBJ/ssh_proxy
30*bc5531deSDag-Erling Smørgrav
31*bc5531deSDag-Erling Smørgravopts="-oProtocol=2 -F $OBJ/ssh_proxy -oIdentitiesOnly=yes"
32*bc5531deSDag-Erling Smørgravopts="$opts -i $OBJ/cert_user_key1 -i $OBJ/user_key1 -i $OBJ/user_key2"
33*bc5531deSDag-Erling Smørgrav
34*bc5531deSDag-Erling Smørgravfor privsep in no yes; do
35*bc5531deSDag-Erling Smørgrav	(
36*bc5531deSDag-Erling Smørgrav		grep -v "Protocol"  $OBJ/sshd_proxy.orig
37*bc5531deSDag-Erling Smørgrav		echo "Protocol 2"
38*bc5531deSDag-Erling Smørgrav		echo "UsePrivilegeSeparation $privsep"
39*bc5531deSDag-Erling Smørgrav		echo "AuthenticationMethods publickey,publickey"
40*bc5531deSDag-Erling Smørgrav		echo "TrustedUserCAKeys $OBJ/user_ca_key.pub"
41*bc5531deSDag-Erling Smørgrav		echo "AuthorizedPrincipalsFile $OBJ/authorized_principals_%u"
42*bc5531deSDag-Erling Smørgrav 	) > $OBJ/sshd_proxy
43*bc5531deSDag-Erling Smørgrav
44*bc5531deSDag-Erling Smørgrav	# Single key should fail.
45*bc5531deSDag-Erling Smørgrav	rm -f $OBJ/authorized_principals_$USER
46*bc5531deSDag-Erling Smørgrav	cat $OBJ/user_key1.pub > $OBJ/authorized_keys_$USER
47*bc5531deSDag-Erling Smørgrav	${SSH} $opts proxy true && fail "ssh succeeded with key"
48*bc5531deSDag-Erling Smørgrav
49*bc5531deSDag-Erling Smørgrav	# Single key with same-public cert should fail.
50*bc5531deSDag-Erling Smørgrav	echo mekmitasdigoat > $OBJ/authorized_principals_$USER
51*bc5531deSDag-Erling Smørgrav	cat $OBJ/user_key1.pub > $OBJ/authorized_keys_$USER
52*bc5531deSDag-Erling Smørgrav	${SSH} $opts proxy true && fail "ssh succeeded with key+cert"
53*bc5531deSDag-Erling Smørgrav
54*bc5531deSDag-Erling Smørgrav	# Multiple plain keys should succeed.
55*bc5531deSDag-Erling Smørgrav	rm -f $OBJ/authorized_principals_$USER
56*bc5531deSDag-Erling Smørgrav	cat $OBJ/user_key1.pub $OBJ/user_key2.pub > \
57*bc5531deSDag-Erling Smørgrav	    $OBJ/authorized_keys_$USER
58*bc5531deSDag-Erling Smørgrav	${SSH} $opts proxy true || fail "ssh failed with multiple keys"
59*bc5531deSDag-Erling Smørgrav	# Cert and different key should succeed
60*bc5531deSDag-Erling Smørgrav
61*bc5531deSDag-Erling Smørgrav	# Key and different-public cert should succeed.
62*bc5531deSDag-Erling Smørgrav	echo mekmitasdigoat > $OBJ/authorized_principals_$USER
63*bc5531deSDag-Erling Smørgrav	cat $OBJ/user_key2.pub > $OBJ/authorized_keys_$USER
64*bc5531deSDag-Erling Smørgrav	${SSH} $opts proxy true || fail "ssh failed with key/cert"
65*bc5531deSDag-Erling Smørgravdone
66*bc5531deSDag-Erling Smørgrav
67