1
0

cert.sh 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. #!/bin/bash
  2. #====FUNCIONES==========
  3. cert_install(){
  4. #apt install socat netcat -y
  5. if [[ ! -e $HOME/.acme.sh/acme.sh ]];then
  6. msg -bar3
  7. msg -ama " Instalando script acme.sh"
  8. curl -s "https://get.acme.sh" | sh &>/dev/null
  9. fi
  10. if [[ ! -z "${mail}" ]]; then
  11. title "LOGEANDO EN Zerossl"
  12. sleep 3
  13. $HOME/.acme.sh/acme.sh --register-account -m ${mail} --server zerossl
  14. $HOME/.acme.sh/acme.sh --set-default-ca --server zerossl
  15. enter
  16. else
  17. title "APLICANDO SERVIDOR letsencrypt"
  18. sleep 3
  19. $HOME/.acme.sh/acme.sh --set-default-ca --server letsencrypt
  20. enter
  21. fi
  22. title "GENERANDO CERTIFICADO SSL"
  23. sleep 3
  24. if "$HOME"/.acme.sh/acme.sh --issue -d "${domain}" --standalone -k ec-256 --force; then
  25. "$HOME"/.acme.sh/acme.sh --installcert -d "${domain}" --fullchainpath ${ADM_crt}/${domain}.crt --keypath ${ADM_crt}/${domain}.key --ecc --force &>/dev/null
  26. rm -rf $HOME/.acme.sh/${domain}_ecc
  27. msg -bar
  28. print_center -verd "Certificado SSL se genero con éxito"
  29. enter
  30. return 1
  31. else
  32. rm -rf "$HOME/.acme.sh/${domain}_ecc"
  33. msg -bar
  34. print_center -verm2 "Error al generar el certificado SSL"
  35. msg -bar
  36. msg -ama " verifique los posibles error"
  37. msg -ama " e intente de nuevo"
  38. enter
  39. return 1
  40. fi
  41. }
  42. ext_cert(){
  43. unset cert
  44. declare -A cert
  45. title "INTALADOR DE CERTIFICADO EXTERNO"
  46. print_center -azu "Requiere tener a mano su certificado ssl"
  47. print_center -azu "junto a su correspondiente clave privada"
  48. msg -bar
  49. msg -ne " Continuar...[S/N]: "
  50. read opcion
  51. [[ $opcion != @(S|s|Y|y) ]] && return 1
  52. title "INGRESE EL CONTENIDO DE SU CERTIFICADO SSL"
  53. msg -ama ' a continuacion se abrira el editor de texto nano
  54. ingrese el contenido de su certificado
  55. guardar precionando "CTRL+x"
  56. luego "S o Y" segun el idioma
  57. y por ultimo "enter"'
  58. msg -bar
  59. msg -ne " Continuar...[S/N]: "
  60. read opcion
  61. [[ $opcion != @(S|s|Y|y) ]] && return 1
  62. rm -rf ${ADM_tmp}/tmp.crt
  63. clear
  64. nano ${ADM_tmp}/tmp.crt
  65. title "INGRESE EL CONTENIDO DE CLAVE PRIVADA"
  66. msg -ama ' a continuacion se abrira el editor de texto nano
  67. ingrese el contenido de su clave privada.
  68. guardar precionando "CTRL+x"
  69. luego "S o Y" segun el idioma
  70. y por ultimo "enter"'
  71. msg -bar
  72. msg -ne " Continuar...[S/N]: "
  73. read opcion
  74. [[ $opcion != @(S|s|Y|y) ]] && return 1
  75. ${ADM_tmp}/tmp.key
  76. clear
  77. nano ${ADM_tmp}/tmp.key
  78. if openssl x509 -in ${ADM_tmp}/tmp.crt -text -noout &>/dev/null ; then
  79. DNS=$(openssl x509 -in ${ADM_tmp}/tmp.crt -text -noout | grep 'DNS:'|sed 's/, /\n/g'|sed 's/DNS:\| //g')
  80. rm -rf ${ADM_crt}/*
  81. if [[ $(echo "$DNS"|wc -l) -gt "1" ]]; then
  82. DNS="multi-domain"
  83. fi
  84. mv ${ADM_tmp}/tmp.crt ${ADM_crt}/$DNS.crt
  85. mv ${ADM_tmp}/tmp.key ${ADM_crt}/$DNS.key
  86. title "INSTALACION COMPLETA"
  87. echo -e "$(msg -verm2 "Domi: ")$(msg -ama "$DNS")"
  88. echo -e "$(msg -verm2 "Emit: ")$(msg -ama "$(openssl x509 -noout -in ${ADM_crt}/$DNS.crt -startdate|sed 's/notBefore=//g')")"
  89. echo -e "$(msg -verm2 "Expi: ")$(msg -ama "$(openssl x509 -noout -in ${ADM_crt}/$DNS.crt -enddate|sed 's/notAfter=//g')")"
  90. echo -e "$(msg -verm2 "Cert: ")$(msg -ama "$(openssl x509 -noout -in ${ADM_crt}/$DNS.crt -issuer|sed 's/issuer=//g'|sed 's/ = /=/g'|sed 's/, /\n /g')")"
  91. msg -bar
  92. echo "$DNS" > ${ADM_src}/dominio.txt
  93. read foo
  94. else
  95. rm -rf ${ADM_tmp}/tmp.crt
  96. rm -rf ${ADM_tmp}/tmp.key
  97. clear
  98. msg -bar
  99. print_center -verm2 "ERROR DE DATOS"
  100. msg -bar
  101. msg -ama " Los datos ingresados no son validos.\n por favor verifique.\n e intente de nuevo!!"
  102. msg -bar
  103. read foo
  104. fi
  105. return 1
  106. }
  107. stop_port(){
  108. msg -bar3
  109. msg -ama " Comprovando puertos..."
  110. ports=('80' '443')
  111. for i in ${ports[@]}; do
  112. if [[ 0 -ne $(lsof -i:$i | grep -i -c "listen") ]]; then
  113. msg -bar3
  114. echo -ne "$(msg -ama " Liberando puerto: $i")"
  115. lsof -i:$i | awk '{print $2}' | grep -v "PID" | xargs kill -9
  116. sleep 2s
  117. if [[ 0 -ne $(lsof -i:$i | grep -i -c "listen") ]];then
  118. tput cuu1 && tput dl1
  119. print_center -verm2 "ERROR AL LIBERAR PURTO $i"
  120. msg -bar3
  121. msg -ama " Puerto $i en uso."
  122. msg -ama " auto-liberacion fallida"
  123. msg -ama " detenga el puerto $i manualmente"
  124. msg -ama " e intentar nuevamente..."
  125. msg -bar
  126. read foo
  127. return 1
  128. fi
  129. fi
  130. done
  131. }
  132. ger_cert(){
  133. clear
  134. case $1 in
  135. 1)title "Generador De Certificado Let's Encrypt";;
  136. 2)title "Generador De Certificado Zerossl";;
  137. esac
  138. print_center -ama "Requiere ingresar un dominio."
  139. print_center -ama "el mismo solo deve resolver DNS, y apuntar"
  140. print_center -ama "a la direccion ip de este servidor."
  141. msg -bar3
  142. print_center -ama "Temporalmente requiere tener"
  143. print_center -ama "los puertos 80 y 443 libres."
  144. if [[ $1 = 2 ]]; then
  145. msg -bar3
  146. print_center -ama "Requiere tener una cuenta Zerossl."
  147. fi
  148. msg -bar
  149. msg -ne " Continuar [S/N]: "
  150. read opcion
  151. [[ $opcion != @(s|S|y|Y) ]] && return 1
  152. if [[ $1 = 2 ]]; then
  153. while [[ -z $mail ]]; do
  154. clear
  155. msg -bar
  156. print_center -ama "ingresa tu correo usado en zerossl"
  157. msg -bar3
  158. msg -ne " >>> "
  159. read mail
  160. done
  161. fi
  162. if [[ -e ${ADM_src}/dominio.txt ]]; then
  163. domain=$(cat ${ADM_src}/dominio.txt)
  164. [[ $domain = "multi-domain" ]] && unset domain
  165. if [[ ! -z $domain ]]; then
  166. clear
  167. msg -bar
  168. print_center -azu "Dominio asociado a esta ip"
  169. msg -bar3
  170. echo -e "$(msg -verm2 " >>> ") $(msg -ama "$domain")"
  171. msg -ne "Continuar, usando este dominio? [S/N]: "
  172. read opcion
  173. tput cuu1 && tput dl1
  174. [[ $opcion != @(S|s|Y|y) ]] && unset domain
  175. fi
  176. fi
  177. while [[ -z $domain ]]; do
  178. clear
  179. msg -bar
  180. print_center -ama "ingresa tu dominio"
  181. msg -bar3
  182. msg -ne " >>> "
  183. read domain
  184. done
  185. msg -bar3
  186. msg -ama " Comprovando direccion IP ..."
  187. local_ip=$(wget -qO- ipv4.icanhazip.com)
  188. domain_ip=$(ping "${domain}" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')
  189. sleep 3
  190. [[ -z "${domain_ip}" ]] && domain_ip="ip no encontrada"
  191. if [[ $(echo "${local_ip}" | tr '.' '+' | bc) -ne $(echo "${domain_ip}" | tr '.' '+' | bc) ]]; then
  192. clear
  193. msg -bar
  194. print_center -verm2 "ERROR DE DIRECCION IP"
  195. msg -bar
  196. msg -ama " La direccion ip de su dominio\n no coincide con la de su servidor."
  197. msg -bar3
  198. echo -e " $(msg -azu "IP dominio: ")$(msg -verm2 "${domain_ip}")"
  199. echo -e " $(msg -azu "IP servidor: ")$(msg -verm2 "${local_ip}")"
  200. msg -bar3
  201. msg -ama " Verifique su dominio, e intente de nuevo."
  202. msg -bar
  203. read foo
  204. return 1
  205. fi
  206. stop_port
  207. cert_install
  208. echo "$domain" > ${ADM_src}/dominio.txt
  209. return 1
  210. }
  211. gen_domi(){
  212. title "GENERADOR DE SUB-DOMINIOS"
  213. msg -ama " Verificando direccion ip..."
  214. sleep 2
  215. ls_dom=$(curl -s -X GET "$url/$_dns/dns_records?per_page=100" \
  216. -H "X-Auth-Email: $correo" \
  217. -H "X-Auth-Key: $apikey" \
  218. -H "Content-Type: application/json" | jq '.')
  219. num_line=$(echo $ls_dom | jq '.result | length')
  220. ls_domi=$(echo $ls_dom | jq -r '.result[].name')
  221. ls_ip=$(echo $ls_dom | jq -r '.result[].content')
  222. my_ip=$(wget -qO- ipv4.icanhazip.com)
  223. if [[ $(echo "$ls_ip"|grep -w "$my_ip") = "$my_ip" ]];then
  224. for (( i = 0; i < $num_line; i++ )); do
  225. if [[ $(echo "$ls_dom" | jq -r ".result[$i].content"|grep -w "$my_ip") = "$my_ip" ]]; then
  226. domain=$(echo "$ls_dom" | jq -r ".result[$i].name")
  227. echo "$domain" > ${ADM_src}/dominio.txt
  228. break
  229. fi
  230. done
  231. tput cuu1 && tput dl1
  232. print_center -azu "ya existe un sub-dominio asociado a esta IP"
  233. msg -bar
  234. echo -e " $(msg -verm2 "sub-dominio:") $(msg -ama "$domain")"
  235. msg -bar
  236. read foo
  237. return 1
  238. fi
  239. if [[ -z $name ]]; then
  240. tput cuu1 && tput dl1
  241. echo -e " $(msg -azu "El dominio principal es:") $(msg -ama "$_domain")\n $(msg -azu "El sub-dominio sera:") $(msg -ama "ejemplo.$_domain")"
  242. msg -bar
  243. while [[ -z "$name" ]]; do
  244. msg -ne " Nombre (ej: vpsfull) >>> "
  245. read name
  246. tput cuu1 && tput dl1
  247. name=$(echo "$name" | tr -d '[[:space:]]')
  248. if [[ -z $name ]]; then
  249. msg -verm2 " ingresar un nombre...!"
  250. unset name
  251. sleep 2
  252. tput cuu1 && tput dl1
  253. continue
  254. elif [[ ! $name =~ $tx_num ]]; then
  255. msg -verm2 " ingresa solo letras y numeros...!"
  256. unset name
  257. sleep 2
  258. tput cuu1 && tput dl1
  259. continue
  260. elif [[ "${#name}" -lt "4" ]]; then
  261. msg -verm2 " nombre demaciado corto!"
  262. sleep 2
  263. tput cuu1 && tput dl1
  264. unset name
  265. continue
  266. else
  267. domain="$name.$_domain"
  268. msg -ama " Verificando disponibiliad..."
  269. sleep 2
  270. tput cuu1 && tput dl1
  271. if [[ $(echo "$ls_domi" | grep "$domain") = "" ]]; then
  272. echo -e " $(msg -verd "[ok]") $(msg -azu "sub-dominio disponible")"
  273. sleep 2
  274. else
  275. echo -e " $(msg -verm2 "[fail]") $(msg -azu "sub-dominio NO disponible")"
  276. unset name
  277. sleep 2
  278. tput cuu1 && tput dl1
  279. continue
  280. fi
  281. fi
  282. done
  283. fi
  284. tput cuu1 && tput dl1
  285. echo -e " $(msg -azu "El sub-dominio sera:") $(msg -verd "$domain")"
  286. msg -bar
  287. msg -ne " Continuar...[S/N]: "
  288. read opcion
  289. [[ $opcion = @(n|N) ]] && return 1
  290. tput cuu1 && tput dl1
  291. print_center -azu "Creando sub-dominio"
  292. sleep 1
  293. var=$(cat <<EOF
  294. {
  295. "type": "A",
  296. "name": "$name",
  297. "content": "$my_ip",
  298. "ttl": 1,
  299. "priority": 10,
  300. "proxied": false
  301. }
  302. EOF
  303. )
  304. chek_domain=$(curl -s -X POST "$url/$_dns/dns_records" \
  305. -H "X-Auth-Email: $correo" \
  306. -H "X-Auth-Key: $apikey" \
  307. -H "Content-Type: application/json" \
  308. -d $(echo $var|jq -c '.')|jq '.')
  309. tput cuu1 && tput dl1
  310. if [[ "$(echo $chek_domain|jq -r '.success')" = "true" ]]; then
  311. echo "$(echo $chek_domain|jq -r '.result.name')" > ${ADM_src}/dominio.txt
  312. print_center -verd "Sub-dominio creado con exito!"
  313. else
  314. echo "" > ${ADM_src}/dominio.txt
  315. print_center -ama "Falla al crear Sub-dominio!"
  316. fi
  317. enter
  318. return 1
  319. }
  320. ger_cert_z(){
  321. echo ""
  322. }
  323. #======MENU======
  324. menu_cert(){
  325. title "SUB-DOMINIO Y CERTIFICADO SSL"
  326. menu_func "GENERAR CERT SSL (Let's Encrypt)" "GENERAR CERT SSL (Zerossl)" "INGRESAR CERT SSL EXTERNO" "GENERAR SUB-DOMINIO"
  327. back
  328. in_opcion "Opcion"
  329. case $opcion in
  330. 1)ger_cert 1;;
  331. 2)ger_cert 2;;
  332. 3)ext_cert;;
  333. 4)gen_domi;;
  334. 0)return 1;;
  335. esac
  336. }
  337. menu_cert