trusted_peer.test 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. #!/bin/sh
  2. # trusted_peer.test
  3. # copyright wolfSSL 2016
  4. # if we can, isolate the network namespace to eliminate port collisions.
  5. if [ "${AM_BWRAPPED-}" != "yes" ]; then
  6. bwrap_path="$(command -v bwrap)"
  7. if [ -n "$bwrap_path" ]; then
  8. export AM_BWRAPPED=yes
  9. exec "$bwrap_path" --unshare-net --dev-bind / / "$0" "$@"
  10. fi
  11. unset AM_BWRAPPED
  12. fi
  13. # getting unique port is modeled after resume.test script
  14. # need a unique port since may run the same time as testsuite
  15. # use server port zero hack to get one
  16. port=0
  17. no_pid=-1
  18. server_pid=$no_pid
  19. counter=0
  20. # let's use absolute path to a local dir (make distcheck may be in sub dir)
  21. # also let's add some randomness by adding pid in case multiple 'make check's
  22. # per source tree
  23. ready_file=`pwd`/wolfssl_tp_ready$$
  24. # variables for certs so can use RSA or ECC
  25. client_cert=`pwd`/certs/client-cert.pem
  26. client_ca=`pwd`/certs/ca-cert.pem
  27. client_key=`pwd`/certs/client-key.pem
  28. ca_key=`pwd`/certs/ca-key.pem
  29. server_cert=`pwd`/certs/server-cert.pem
  30. server_key=`pwd`/certs/server-key.pem
  31. combined_cert=`pwd`/certs/client_combined.pem
  32. wrong_ca=`pwd`/certs/wolfssl-website-ca.pem
  33. wrong_cert=`pwd`/certs/server-revoked-cert.pem
  34. echo "ready file $ready_file"
  35. create_port() {
  36. while [ ! -s $ready_file -a "$counter" -lt 20 ]; do
  37. echo -e "waiting for ready file..."
  38. sleep 0.1
  39. counter=$((counter+ 1))
  40. done
  41. if test -e $ready_file; then
  42. echo -e "found ready file, starting client..."
  43. # get created port 0 ephemeral port
  44. port=`cat $ready_file`
  45. else
  46. echo -e "NO ready file ending test..."
  47. do_cleanup
  48. fi
  49. }
  50. remove_ready_file() {
  51. if test -e $ready_file; then
  52. echo -e "removing existing ready file"
  53. rm $ready_file
  54. fi
  55. }
  56. do_cleanup() {
  57. echo "in cleanup"
  58. if [ $server_pid != $no_pid ]
  59. then
  60. echo "killing server"
  61. kill -9 $server_pid
  62. fi
  63. remove_ready_file
  64. }
  65. do_trap() {
  66. echo "got trap"
  67. do_cleanup
  68. exit -1
  69. }
  70. trap do_trap INT TERM
  71. [ ! -x ./examples/client/client ] && echo -e "\n\nClient doesn't exist" && exit 1
  72. # Look for if RSA and/or ECC is enabled and adjust certs/keys
  73. ciphers=`./examples/client/client -e`
  74. if [[ $ciphers != *"RSA"* ]]; then
  75. if [[ $ciphers == *"ECDSA"* ]]; then
  76. client_cert=`pwd`/certs/client-ecc-cert.pem
  77. client_ca=`pwd`/certs/server-ecc.pem
  78. client_key=`pwd`/certs/ecc-client-key.pem
  79. ca_key=`pwd`/certs/ecc-key.pem
  80. server_cert=`pwd`/certs/server-ecc.pem
  81. server_key=`pwd`/certs/ecc-key.pem
  82. wrong_ca=`pwd`/certs/server-ecc-comp.pem
  83. wrong_cert=`pwd`/certs/server-ecc-comp.pem
  84. else
  85. echo "configure options not set up for test. No RSA or ECC"
  86. exit 0
  87. fi
  88. fi
  89. # CRL list not set up for tests
  90. crl_test=`./examples/client/client -h`
  91. if [[ $crl_test == *"-C "* ]]; then
  92. echo "test not set up to run with CRL"
  93. exit 0
  94. fi
  95. # Test for trusted peer certs build
  96. echo ""
  97. echo "Checking built with trusted peer certs "
  98. echo "-----------------------------------------------------"
  99. port=0
  100. remove_ready_file
  101. ./examples/server/server -E $client_cert -c $server_cert -k $server_key -R $ready_file -p $port &
  102. server_pid=$!
  103. create_port
  104. ./examples/client/client -A $client_ca -p $port
  105. RESULT=$?
  106. remove_ready_file
  107. # if fail here then is a settings issue so return 0
  108. if [ $RESULT -ne 0 ]; then
  109. echo -e "\n\nTrusted peer certs not enabled \"WOLFSSL_TRUST_PEER_CERT\""
  110. do_cleanup
  111. exit 0
  112. fi
  113. echo ""
  114. # Test that using no CA's and only trusted peer certs works
  115. echo "Server and Client relying on trusted peer cert loaded"
  116. echo "-----------------------------------------------------"
  117. port=0
  118. ./examples/server/server -A $wrong_ca -E $client_cert -c $server_cert -k $server_key -R $ready_file -p $port &
  119. server_pid=$!
  120. create_port
  121. ./examples/client/client -A $wrong_ca -E $server_cert -c $client_cert -p $port
  122. RESULT=$?
  123. remove_ready_file
  124. if [ $RESULT -ne 0 ]; then
  125. echo -e "\nServer and Client trusted peer cert failed!"
  126. do_cleanup
  127. exit 1
  128. fi
  129. echo ""
  130. # Test that using server trusted peer certs works
  131. echo "Server relying on trusted peer cert loaded"
  132. echo "-----------------------------------------------------"
  133. port=0
  134. ./examples/server/server -A $wrong_ca -E $client_cert -c $server_cert -k $server_key -R $ready_file -p $port &
  135. server_pid=$!
  136. create_port
  137. ./examples/client/client -A $client_ca -c $client_cert -p $port
  138. RESULT=$?
  139. remove_ready_file
  140. if [ $RESULT -ne 0 ]; then
  141. echo -e "\nServer trusted peer cert test failed!"
  142. do_cleanup
  143. exit 1
  144. fi
  145. echo ""
  146. # Test that using client trusted peer certs works
  147. echo "Client relying on trusted peer cert loaded"
  148. echo "-----------------------------------------------------"
  149. port=0
  150. ./examples/server/server -c $server_cert -k $server_key -R $ready_file -p $port &
  151. server_pid=$!
  152. create_port
  153. ./examples/client/client -A $wrong_ca -E $server_cert -p $port
  154. RESULT=$?
  155. remove_ready_file
  156. if [ $RESULT -ne 0 ]; then
  157. echo -e "\nClient trusted peer cert test failed!"
  158. do_cleanup
  159. exit 1
  160. fi
  161. echo ""
  162. # Test that client fall through to CA works
  163. echo "Client fall through to loaded CAs"
  164. echo "-----------------------------------------------------"
  165. port=0
  166. ./examples/server/server -c $server_cert -k $server_key -R $ready_file -p $port &
  167. server_pid=$!
  168. create_port
  169. ./examples/client/client -A $client_ca -E $wrong_cert -p $port
  170. RESULT=$?
  171. remove_ready_file
  172. if [ $RESULT -ne 0 ]; then
  173. echo -e "\nClient trusted peer cert fall through to CA test failed!"
  174. do_cleanup
  175. exit 1
  176. fi
  177. echo ""
  178. # Test that client can fail
  179. # check if using ECC client example is hard coded to load correct ECC ca so skip
  180. if [[ $wrong_ca != *"ecc"* ]]; then
  181. echo "Client wrong CA and wrong trusted peer cert loaded"
  182. echo "-----------------------------------------------------"
  183. port=0
  184. ./examples/server/server -c $server_cert -k $server_key -R $ready_file -p $port &
  185. server_pid=$!
  186. create_port
  187. ./examples/client/client -A $wrong_ca -E $wrong_cert -p $port
  188. RESULT=$?
  189. remove_ready_file
  190. if [ $RESULT -eq 0 ]; then
  191. echo -e "\nClient trusted peer cert test failed!"
  192. do_cleanup
  193. exit 1
  194. fi
  195. echo ""
  196. fi
  197. # Test that server can fail
  198. echo "Server wrong CA and wrong trusted peer cert loaded"
  199. echo "-----------------------------------------------------"
  200. port=0
  201. ./examples/server/server -A $wrong_ca -E $wrong_cert -c $server_cert -k $server_key -R $ready_file -p $port &
  202. server_pid=$!
  203. create_port
  204. ./examples/client/client -A $client_ca -p $port
  205. RESULT=$?
  206. remove_ready_file
  207. if [ $RESULT -eq 0 ]; then
  208. echo -e "\nServer trusted peer cert test failed!"
  209. do_cleanup
  210. exit 1
  211. fi
  212. echo ""
  213. # Test that server fall through to CA works
  214. echo "Server fall through to loaded CAs"
  215. echo "-----------------------------------------------------"
  216. port=0
  217. ./examples/server/server -E $wrong_cert -c $server_cert -k $server_key -R $ready_file -p $port &
  218. server_pid=$!
  219. create_port
  220. ./examples/client/client -A $client_ca -p $port
  221. RESULT=$?
  222. remove_ready_file
  223. if [ $RESULT -ne 0 ]; then
  224. echo -e "\nServer trusted peer cert fall through to CA test failed!"
  225. do_cleanup
  226. exit 1
  227. fi
  228. echo ""
  229. # test loading multiple certs
  230. echo "Server loading multiple trusted peer certs"
  231. echo "Test two success cases and one fail case"
  232. echo "-----------------------------------------------------"
  233. port=0
  234. cat $client_cert $client_ca > $combined_cert
  235. ./examples/server/server -i -A $wrong_ca -E $combined_cert -c $server_cert -k $server_key -R $ready_file -p $port &
  236. server_pid=$!
  237. create_port
  238. ./examples/client/client -A $client_ca -c $client_cert -k $client_key -p $port
  239. RESULT=$?
  240. if [ $RESULT -ne 0 ]; then
  241. echo -e "\nServer load multiple trusted peer certs failed!"
  242. do_cleanup
  243. exit 1
  244. fi
  245. ./examples/client/client -A $client_ca -c $client_ca -k $ca_key -p $port
  246. RESULT=$?
  247. if [ $RESULT -ne 0 ]; then
  248. echo -e "\nServer load multiple trusted peer certs failed!"
  249. do_cleanup
  250. exit 1
  251. fi
  252. ./examples/client/client -A $client_ca -c $wrong_cert -k $client_key -p $port
  253. RESULT=$?
  254. if [ $RESULT -eq 0 ]; then
  255. echo -e "\nServer load multiple trusted peer certs failed!"
  256. do_cleanup
  257. exit 1
  258. fi
  259. do_cleanup # kill PID of server running in infinite loop
  260. rm $combined_cert
  261. remove_ready_file
  262. echo ""
  263. echo "-----------------------------------------------------"
  264. echo "ALL TESTS PASSED"
  265. echo "-----------------------------------------------------"
  266. exit 0