creatcert.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #!/usr/bin/env bash
  2. # script create ssl certs
  3. #
  4. ##!! manual values
  5. # Set the TLD domain we want to use
  6. BASE_DOMAIN="mydomain.ru"
  7. # Days for the cert to live
  8. DAYS=3600
  9. # A blank passphrase
  10. PASSPHRASE=""
  11. # Generated configuration file
  12. CONFIG_FILE="config.txt"
  13. Country="RU";
  14. City="MyCity";
  15. Fname="myfirm";
  16. Demail="admin@mydomain.ru"
  17. ## script values
  18. version="0.0.5";
  19. sname="creatcert";
  20. # - options
  21. cmd=$1;
  22. opt=$2;
  23. # script path
  24. path_script=$( cd -- $( dirname -- "${BASH_SOURCE[0]}" ) &> /dev/null && pwd );
  25. # SSL path
  26. path_ssl="/etc/ssl";
  27. function createSSL() {
  28. cat > $CONFIG_FILE <<-EOF
  29. [req]
  30. default_bits = 2048
  31. prompt = no
  32. default_md = sha256
  33. x509_extensions = v3_req
  34. distinguished_name = dn
  35. [dn]
  36. C = CA
  37. ST = $Country
  38. L = $City
  39. O = $Fname
  40. OU = $Fname
  41. emailAddress = $Demail
  42. CN = $BASE_DOMAIN
  43. [v3_req]
  44. subjectAltName = @alt_names
  45. [alt_names]
  46. DNS.1 = *.$BASE_DOMAIN
  47. DNS.2 = $BASE_DOMAIN
  48. EOF
  49. # The file name can be anything
  50. FILE_NAME="$BASE_DOMAIN"
  51. # Remove previous keys
  52. echo "Removing existing certs like $FILE_NAME.*"
  53. find -maxdepth 1 -type f -name $FILE_NAME.crt -exec rm -rv "{}" + >/dev/null
  54. find -maxdepth 1 -type f -name $FILE_NAME.key -exec rm -rv "{}" + >/dev/null
  55. find -maxdepth 1 -type f -name $FILE_NAME.info -exec rm -rv "{}" + >/dev/null
  56. echo "Generating certs for $BASE_DOMAIN"
  57. # Generate our Private Key, CSR and Certificate
  58. # Use SHA-2 as SHA-1 is unsupported from Jan 1, 2017
  59. openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout "$FILE_NAME.key" -days $DAYS -out "$FILE_NAME.crt" -passin pass:$PASSPHRASE -config "$CONFIG_FILE"
  60. # OPTIONAL - write an info to see the details of the generated crt
  61. openssl x509 -noout -fingerprint -text < "$FILE_NAME.crt" > "$FILE_NAME.info"
  62. # Protect the key
  63. chmod 400 "$FILE_NAME.key"
  64. ## Registred from ssl
  65. if [ -d $path_ssl ]; then
  66. cat $FILE_NAME.key > $path_ssl/private/privkey_$FILE_NAME.pem;
  67. cat $FILE_NAME.crt > $path_ssl/private/fullchain_$FILE_NAME.pem;
  68. cat $FILE_NAME.crt > $path_ssl/certs/$FILE_NAME.pem;
  69. cat $FILE_NAME.key >> $path_ssl/certs/$FILE_NAME.pem;
  70. cd $path_ssl/certs;
  71. chmod 600 $FILE_NAME.pem
  72. ln -sf $FILE_NAME.pem `openssl x509 -noout -hash < $FILE_NAME.pem`.0
  73. cd $path_ssl
  74. fi
  75. if [ "$opt" == "pve" ];then
  76. pve_name="$HOSTNAME"
  77. if [ -d /etc/pve/nodes/$pve_name ];then
  78. cat $path_script/$FILE_NAME.crt >/etc/pve/nodes/$pve_name/pve_ssl.pem
  79. cat $path_script/$FILE_NAME.key >/etc/pve/nodes/$pve_name/pve_ssl.key
  80. sudo pveproxy restart
  81. fi
  82. fi
  83. }
  84. case "$cmd" in
  85. ## create cert
  86. "--create" | "--create" )
  87. createSSL;
  88. ;;
  89. ## start defaults
  90. * )
  91. echo "script - $sname"
  92. echo "version- $version"
  93. echo "start create ssl certs: creatcert --create"
  94. echo "start create ssl cert for poroxmox pve node: --create pve"
  95. echo " Vanted: write from script manual values for domain!"
  96. ;;
  97. esac
  98. exit