blob: 2cb03a601d3ca5f6309d9597a05ce36329868172 [file] [log] [blame]
#!/bin/sh
. STlsVars
#########################################
# CERTIFICATE SETUP
#
# produce the certificates to use
# snmpd
HOSTNAME=`hostname`
CAPTURE $NSCERT gencert -t snmpd --cn $HOSTNAME $NSCERTARGS
SERVERFP=`$NSCERT showcerts --fingerprint --brief snmpd $NSCERTARGS`
CHECKVALUEISNT "$SERVERFP" "" "generated fingerprint for snmpd certificate"
# user
CAPTURE $NSCERT gencert -t snmpapp --cn 'testuser' $NSCERTARGS
TESTUSERFP=`$NSCERT showcerts --fingerprint --brief snmpapp $NSCERTARGS`
CHECKVALUEISNT "$TESTUSERFP" "" "generated fingerprint for testuser certificate"
# user 1.5
CAPTURE $NSCERT gencert -t snmpapp2 --cn 'testuser2' $NSCERTARGS
TESTUSER2FP=`$NSCERT showcerts --fingerprint --brief snmpapp2 $NSCERTARGS`
CHECKVALUEISNT "$TESTUSER2FP" "" "generated fingerprint for testuser certificate"
# user 2
CAPTURE $NSCERT gencert -t otheruser --cn 'otheruser' $NSCERTARGS
OTHERUSERFP=`$NSCERT showcerts --fingerprint --brief otheruser $NSCERTARGS`
CHECKVALUEISNT "$OTHERUSERFP" "" "generated fingerprint for otheruser certificate"
# user 3
CAPTURE $NSCERT gencert -t invaliduser --cn 'invaliduser' $NSCERTARGS
INVALIDUSERFP=`$NSCERT showcerts --fingerprint --brief invaliduser $NSCERTARGS`
CHECKVALUEISNT "$INVALIDUSERFP" "" "generated fingerprint for otheruser certificate"
# user 4
CAPTURE $NSCERT gencert -t unmapped --cn 'unmapped' $NSCERTARGS
UNMAPPEDFP=`$NSCERT showcerts --fingerprint --brief unmapped $NSCERTARGS`
CHECKVALUEISNT "$UNMAPPEDFP" "" "generated fingerprint for unmapped certificate"
# user 5
CAPTURE $NSCERT gencert -t mappeduser --cn 'mappeduser' $NSCERTARGS
MAPPEDUSERFP=`$NSCERT showcerts --fingerprint --brief mappeduser $NSCERTARGS`
CHECKVALUEISNT "$MAPPEDUSERFP" "" "generated fingerprint for mappeduser certificate"
# user 6: SAN email
CAPTURE $NSCERT gencert -t email --san email:foobaruser@example.com $NSCERTARGS
EMAILUSERFP=`$NSCERT showcerts --fingerprint --brief email $NSCERTARGS`
CHECKVALUEISNT "$EMAILUSERFP" "" "generated fingerprint for email certificate"
# user 7: SAN dns
CAPTURE $NSCERT gencert -t dns --san DNS:foobar.example.com $NSCERTARGS
DNSUSERFP=`$NSCERT showcerts --fingerprint --brief dns $NSCERTARGS`
CHECKVALUEISNT "$DNSUSERFP" "" "generated fingerprint for dns certificate"
# user 8: SAN IPv4
CAPTURE $NSCERT gencert -t ipaddr --san IP:127.0.0.1 $NSCERTARGS
IPUSERFP=`$NSCERT showcerts --fingerprint --brief ipaddr $NSCERTARGS`
CHECKVALUEISNT "$IPUSERFP" "" "generated fingerprint for ipaddr certificate"
# user 8.1: afile
CAPTURE $NSCERT gencert -t afile --cn afileuser $NSCERTARGS
AFILEUSERFP=`$NSCERT showcerts --fingerprint --brief afile $NSCERTARGS`
CHECKVALUEISNT "$AFILEUSERFP" "" "generated fingerprint for afile certificate"
# CA certificate
CAPTURE $NSCERT genca --cn ca-net-snmp.org $NSCERTARGS
CAFP=`$NSCERT showcas --fingerprint --brief ca-net-snmp.org $NSCERTARGS`
CHECKVALUEISNT "$CAFP" "" "generated fingerprint for ca-net-snmp.org certificate"
# user 9: CA signed user cert
CAPTURE $NSCERT gencert -t causer --with-ca ca-net-snmp.org --san email:user9@test.net-snmp.org --email user9@test.net-snmp.org $NSCERTARGS
CAUSERFP=`$NSCERT showcerts --fingerprint --brief causer $NSCERTARGS`
CHECKVALUEISNT "$CAUSERFP" "" "generated fingerprint for causer certificate"
CAPTURE $NSCERT gencert -t cadirect9b --with-ca ca-net-snmp.org --san email:user9b@test.net-snmp.org --email user9b@test.net-snmp.org $NSCERTARGS
CADIRECTFP=`$NSCERT showcerts --fingerprint --brief cadirect9b $NSCERTARGS`
CHECKVALUEISNT "$CADIRECTFP" "" "generated fingerprint for cadirect certificate"
CAPTURE $NSCERT genca --cn ca2-net-snmp.org $NSCERTARGS
CA2FP=`$NSCERT showcas --fingerprint --brief ca2-net-snmp.org $NSCERTARGS`
CHECKVALUEISNT "$CA2FP" "" "generated fingerprint for ca2-net-snmp.org certificate"
CAPTURE $NSCERT gencert -t cadirect9c --with-ca ca2-net-snmp.org --san email:user9c@test.net-snmp.org --email user9c@test.net-snmp.org $NSCERTARGS
CADIRECT9CFP=`$NSCERT showcerts --fingerprint --brief cadirect9c $NSCERTARGS`
CHECKVALUEISNT "$CADIRECT9CFP" "" "generated fingerprint for cadirect9c certificate"
CAPTURE $NSCERT gencert -t cadirect9d --with-ca ca2-net-snmp.org --san email:user9d@test.net-snmp.org --email user9d@test.net-snmp.org $NSCERTARGS
CADIRECT9DFP=`$NSCERT showcerts --fingerprint --brief cadirect9d $NSCERTARGS`
CHECKVALUEISNT "$CADIRECT9DFP" "" "generated fingerprint for cadirect9d certificate"
#########################################
# AGENT CONFIGURATION
#
CONFIGAGENT '[snmp]' debugTokens tsm
# ,tls,ssl,cert,tsm
CONFIGAGENT '[snmp]' doDebugging 1
CONFIGAGENT '[snmp]' logTimestamp 1
CONFIGAGENT '[snmp]' serverCert $SERVERFP
CONFIGAGENT '[snmp]' trustCert $CAFP
CONFIGAGENT '[snmp]' trustCert $CADIRECT9CFP
# common name mappings
CONFIGAGENT certSecName 9 $TESTUSERFP --cn
CONFIGAGENT certSecName 10 $TESTUSER2FP --cn
CONFIGAGENT certSecName 11 $OTHERUSERFP --cn
CONFIGAGENT certSecName 12 $INVALIDUSERFP --cn
CONFIGAGENT certSecName 20 $MAPPEDUSERFP --sn aftermapping
CONFIGAGENT certSecName 21 $EMAILUSERFP --rfc822
CONFIGAGENT certSecName 22 $DNSUSERFP --dns
CONFIGAGENT certSecName 23 $IPUSERFP --ip
CONFIGAGENT certSecName 24 afile --cn
CONFIGAGENT certSecName 100 $CAFP --rfc822
CONFIGAGENT certSecName 101 $CADIRECTFP --sn causerdirectmap
CONFIGAGENT certSecName 102 $CADIRECT9CFP --sn causerdirect9cmap
# intentionally not mapped:
#CONFIGAGENT certSecName 1001 $CADIRECT9DFP --sn causerdirect9dmap
# *** INTENTIONALLY NOT MAPPING AT ALL: ***
# CONFIGAGENT certSecName 1000 $UNMAPPEDFP ....
CONFIGAPP serverCert $SERVERFP
CONFIGAPP defSecurityModel tsm
CONFIGAPP logTimestamp 1
CONFIGAGENT rwuser -s tsm testuser authpriv
CONFIGAGENT rwuser -s tsm testuser2 authpriv
CONFIGAGENT rwuser -s tsm otheruser authpriv
CONFIGAGENT rwuser -s tsm aftermapping authpriv
CONFIGAGENT rwuser -s tsm foobaruser@example.com authpriv
CONFIGAGENT rwuser -s tsm foobar.example.com authpriv
CONFIGAGENT rwuser -s tsm 127.0.0.1 authpriv
CONFIGAGENT rwuser -s tsm user8@test.net-snmp.org authpriv
CONFIGAGENT rwuser -s tsm user9@test.net-snmp.org authpriv
CONFIGAGENT rwuser -s tsm user10@test.net-snmp.org authpriv
CONFIGAGENT rwuser -s tsm afileuser authpriv
CONFIGAGENT rwuser -s tsm causerdirectmap authpriv
CONFIGAGENT rwuser -s tsm causerdirect9cmap authpriv
# this file contains tests common to both tls and dtls usages
# start the agent up
FLAGS="-Dtls -v3 -On $SNMP_FLAGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT"
STARTAGENT
# shouldn't have config errors
CHECKAGENTCOUNT 0 ": Error:"
######################################################################
# EXTENDED CERTIFICATE SETUP
#
# Perform more steps of configuration that should occur *after* the
# agent has started in order to prevent it from having seen these
# files ahead of time.
# this user's fingerprint should not be recognized
CAPTURE $NSCERT gencert -t unknownuser --san email:unknownuser@example.com $NSCERTARGS
UNKNOWNUSER=`$NSCERT showcerts --fingerprint --brief unknownuser $NSCERTARGS`
CHECKVALUEISNT "$UNMAPPEDFP" "" "generated fingerprint for unknownuser certificate"
# this user's fingerprint should not be directly recognized, but it's
# CA should.
# user 10: CA signed cert
CAPTURE $NSCERT gencert -D -t unknowncauser --cn unknowncauser@net-snmp.org --email unknowncauser@net-snmp.org --with-ca ca-net-snmp.org --san email:user10@test.net-snmp.org $NSCERTARGS
UNKNOWNCAUSERFP=`$NSCERT showcerts --fingerprint --brief unknowncauser $NSCERTARGS`
CHECKVALUEISNT "$UNKNOWNCAUSERFP" "" "generated fingerprint for unknowncauser certificate"
######################################################################
# ACTUAL TESTS
#
# Run the actual list of tests
#
# using user 1 - a common name mapped certificate
# (using the default "snmpapp" certificate because we don't specify another)
DOSETTEST user1SnmpApp "$FLAGS"
# now rerun the test after specifying our default using the (same) fingerprint
CONFIGAPP clientCert $TESTUSER2FP
DOSETTEST user1ClientPub "$FLAGS"
# using user 2 - a common name mapped certificate with a direct -T FP request
DOSETTEST user2DashTFPFlag "-T our_identity=$OTHERUSERFP $FLAGS"
CHECKAGENTCOUNT 4 "otheruser"
# using user 2, specifying the file name instead of the fingerprint
DOSETTEST user2DashTFileFlag "-T our_identity=otheruser $FLAGS"
CHECKAGENTCOUNT 8 "otheruser"
# using user 3 - an invalid certificate (mapped but not authorized)
DOFAILSETTEST "invalidUnauthorizedCert" "-T our_identity=$INVALIDUSERFP $FLAGS"
CHECK "authorizationError"
# using user 4 - an unmapped certificate
DOFAILSETTEST "unmappedCertificate" "-T our_identity=$UNMAPPEDFP $FLAGS"
CHECK "failed rfc5343"
# Check *their* certificate with a different one than expected; should fail
DOFAILSETTEST "incorectServerCertificate" "-r 0 -T our_identity=$OTHERUSERFP -T their_identity=$OTHERUSERFP $FLAGS"
CHECK "failed to verify ssl certificate"
# using user 5 - a completely remapped certificate (direct specified secname)
DOSETTEST user5RemappedSecname "-T our_identity=$MAPPEDUSERFP $FLAGS"
# using user 6 - a subjectAltName=email certificate mapping
DOSETTEST user6SANEmail "-T our_identity=$EMAILUSERFP $FLAGS"
# using user 7 - a subjectAltName=dns certificate mapping
DOSETTEST user7SANDNS "-T our_identity=$DNSUSERFP $FLAGS"
# using user 8 - a subjectAltName=ipv4 certificate mapping
DOSETTEST user8SANIP "-T our_identity=$IPUSERFP $FLAGS"
# using user 8 - test that certmapping works from a local filename
DOSETTEST afileuser "-T our_identity=afile $FLAGS"
# using user 9 - a CA signed certificate
DOSETTEST user9CASignedCert "-T our_identity=$CAUSERFP -T trust_cert=$CAFP $FLAGS"
# using user 9b - a CA signed certificate with a user-based fp mapping
DOSETTEST user9bCASignedDirectMap "-T our_identity=$CADIRECTFP $FLAGS"
# using user 9c - a CA2 signed certificate with a user-based fp mapping
DOSETTEST user9cCASignedDirectMap "-T our_identity=$CADIRECT9CFP $FLAGS"
# using user 9d - a CA2 signed certificate no user-based fp mapping
DOFAILSETTEST user9dCASignedDirectMap "-T our_identity=$CADIRECT9DFP $FLAGS"
# using user unknown - the server will not have seen this fingerprint at all
CAPTURE "snmpget -T our_identity=$UNKNOWNUSER -T trust_cert=$CAFP $FLAGS .1.3.6.1.2.1.1.6.0"
# different types of failure messaages for tls/dtls...
if [ $SNMP_TRANSPORT_SPEC = dtlsudp ]; then
CHECK "failed rfc5343 contextEngineID probing"
CHECKAGENTCOUNT 1 "TLS Error: no certificate returned"
else
CHECK "failed to ssl_connect"
CHECKAGENTCOUNT 1 "Failed SSL_accept"
fi
# using the user without a known fingerprint but with a known CA
DOSETTEST userNewFromCA " -T trust_cert=$CAFP -T our_identity=$UNKNOWNCAUSERFP $FLAGS"
STOPAGENT
FINISHED