client.sh 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. command -v openssl >>/dev/null 2>&1
  3. [ $? -ne 0 ] && echo "Not Found 'openssl'" && exit 1
  4. cd `dirname "$0"`
  5. export OrgName
  6. export GroupName
  7. export PASSWORD
  8. export INIT
  9. export BLANK=" "
  10. while [[ $# -ge 1 ]]; do
  11. case $1 in
  12. -o)
  13. shift
  14. OrgName=`echo "$1" |sed 's/\s//g'`
  15. shift
  16. ;;
  17. -g)
  18. shift
  19. GroupName=`echo "$1" |sed 's/\s//g'`
  20. shift
  21. ;;
  22. -p)
  23. shift
  24. PASSWORD=`echo "$1" |sed 's/\s//g'`
  25. shift
  26. ;;
  27. -i)
  28. shift
  29. INI_=`echo $1 |sed 's/\s//g'`
  30. INIT="${INI_:-0.0.0.0}"
  31. shift
  32. ;;
  33. *)
  34. echo -e "Usage:\n\tbash $0 -o <OrgName> -g <GroupName> -p <PASSWORD> -i <CN>\n"
  35. exit 1;
  36. ;;
  37. esac
  38. done
  39. [ -n "$INIT" ] && [ -f "./ca.cert.pem" ] && [ -n "${OrgName}" ] && rm -rf "./ca.cert.pem"
  40. [ "$BLANK" == " " ] && [ -f "$HOME/.rnd" ] || openssl rand -writerand "$HOME/.rnd"
  41. [ -f "./ca.cert.pem" ] && OrgName=`openssl x509 -noout -in "./ca.cert.pem" -subject 2>/dev/null |sed 's/.*\s*O\s\+=\s\+\([^,\ ]\+\),.*/\1/'`
  42. [ -n "${OrgName}" ] || OrgName="MoeClub"
  43. [ -n "${GroupName}" ] || GroupName="Default"
  44. if [ ! -f ./ca.cert.pem -o ! -f ./ca.key.pem ] || [ -n "$INIT" ] ; then
  45. openssl req -x509 -sha256 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes -days 3650 -subj "/C=${BLANK}${BLANK}/ST=${BLANK}/L=${BLANK}/OU=${BLANK}/O=${OrgName}/CN=${OrgName} CA" -addext "keyUsage=critical, keyCertSign, cRLSign" -rand /dev/urandom -outform PEM -keyout "./ca.key.pem" -out "./ca.cert.pem" >/dev/null 2>&1
  46. [ $? -ne 0 ] && echo "Generating CA Fail" && exit 1
  47. cp -rf ./ca.cert.pem ../ca.cert.pem
  48. openssl req -x509 -sha256 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes -days 3650 -subj "/C=${BLANK}${BLANK}/ST=${BLANK}/L=${BLANK}/OU=${BLANK}/O=${BLANK}/CN=${INIT:-0.0.0.0}" -config <(echo -e "[ req ]\ndistinguished_name=req\n") -addext "basicConstraints=CA:FALSE" -addext "keyUsage=critical, digitalSignature, keyEncipherment" -addext "extendedKeyUsage=serverAuth, clientAuth" -rand /dev/urandom -outform PEM -keyout "../server.key.pem" -out "../server.cert.pem" >/dev/null 2>&1
  49. [ $? -ne 0 ] && echo "Generating Server Cert Fail" && exit 1
  50. chmod 755 ../ca.cert.pem ../server.key.pem ../server.cert.pem
  51. fi
  52. if [ -n "$INIT" ]; then
  53. exit 0
  54. fi
  55. openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes -subj "/C=${BLANK}${BLANK}/ST=${BLANK}/L=${BLANK}/OU=${GroupName}/O=${OrgName}/CN=${OrgName}.${GroupName}" -rand /dev/urandom -outform PEM -keyout "./user.key.pem" -out "./user.csr.pem" >/dev/null 2>&1
  56. [ $? -ne 0 ] && echo "Generating CSR Fail" && exit 1
  57. openssl x509 -set_serial `printf "%04d" "$(($RANDOM % 10000))"` -CAform PEM -CA "./ca.cert.pem" -CAkey "./ca.key.pem" -req -sha256 -days 365 -in "./user.csr.pem" -outform PEM -out "./user.cert.pem" -extfile <(echo -e "basicConstraints=CA:FALSE\nkeyUsage=digitalSignature\nextendedKeyUsage=clientAuth\nsubjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid\n")
  58. [ $? -ne 0 ] && echo "Generating Cert Fail" && exit 1
  59. cat ./ca.cert.pem >>./user.cert.pem
  60. openssl pkcs12 --help 2>&1 |grep -q 'legacy' && legacy="-legacy" || legacy=""
  61. openssl pkcs12 $legacy -export -inkey "./user.key.pem" -in "./user.cert.pem" -name "${OrgName}.${GroupName}" -certfile "./ca.cert.pem" -caname "${OrgName} CA" -out "./${GroupName}.p12" -passout "pass:$PASSWORD"
  62. [ $? -eq '0' ] && echo -e "\nSuccess! \nGROUP\t\tPASSWORD\n${GroupName}\t\t$PASSWORD\n" || echo -e "\nFail! \n";
  63. rm -rf ./user.csr.pem ./user.key.pem ./user.cert.pem
  64. # openssl x509 -noout -text -in ./ca.cert.pem
  65. exit 0