letsencrypt.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #!/bin/sh
  2. # FusionPBX - Install
  3. # Mark J Crane <[email protected]>
  4. # Copyright (C) 2018
  5. # All Rights Reserved.
  6. #move to script directory so all relative paths work
  7. cd "$(dirname "$0")"
  8. #includes
  9. . ./config.sh
  10. #remove dehyrdated letsencrypt script
  11. rm /usr/local/sbin/dehydrated
  12. rm -R /usr/src/dehydrated
  13. #rm -R /etc/dehydrated/
  14. #rm -R /usr/src/dns-01-manual
  15. #rm -R /var/www/dehydrated
  16. #request the domain name, email address and wild card domain
  17. read -p 'Domain Name: ' domain_name
  18. read -p 'Email Address: ' email_address
  19. #get and install dehydrated
  20. cd /usr/src && git clone https://github.com/dehydrated-io/dehydrated.git
  21. cd /usr/src/dehydrated
  22. cp dehydrated /usr/local/sbin
  23. mkdir -p /var/www/dehydrated
  24. mkdir -p /etc/dehydrated/certs
  25. #wildcard detection
  26. wilcard_domain=$(echo $domain_name | cut -c1-1)
  27. if [ "$wilcard_domain" = "*" ]; then
  28. wilcard_domain="true"
  29. else
  30. wilcard_domain="false"
  31. fi
  32. #remove the wildcard and period
  33. if [ .$wilcard_domain = ."true" ]; then
  34. domain_name=$(echo "$domain_name" | cut -c3-255)
  35. fi
  36. #manual dns hook
  37. if [ .$wilcard_domain = ."true" ]; then
  38. cd /usr/src
  39. git clone https://github.com/gheja/dns-01-manual.git
  40. cd /usr/src/dns-01-manual/
  41. cp hook.sh /etc/dehydrated/hook.sh
  42. chmod 755 /etc/dehydrated/hook.sh
  43. fi
  44. #copy config and hook.sh into /etc/dehydrated
  45. cd /usr/src/dehydrated
  46. cp docs/examples/config /etc/dehydrated
  47. #cp docs/examples/hook.sh /etc/dehydrated
  48. #update the dehydrated config
  49. #sed "s#CONTACT_EMAIL=#CONTACT_EMAIL=$email_address" -i /etc/dehydrated/config
  50. sed -i 's/#CONTACT_EMAIL=/CONTACT_EMAIL="'"$email_address"'"/g' /etc/dehydrated/config
  51. sed -i 's/#WELLKNOWN=/WELLKNOWN=/g' /etc/dehydrated/config
  52. #accept the terms
  53. dehydrated --register --accept-terms --config /etc/dehydrated/config
  54. #set the domain alias
  55. domain_alias=$(echo "$domain_name" | head -n1 | cut -d " " -f1)
  56. #create an alias when using wildcard dns
  57. if [ .$wilcard_domain = ."true" ]; then
  58. echo "*.$domain_name > $domain_name" > /etc/dehydrated/domains.txt
  59. fi
  60. #add the domain name to domains.txt
  61. if [ .$wilcard_domain = ."false" ]; then
  62. echo "$domain_name" > /etc/dehydrated/domains.txt
  63. fi
  64. #request the certificates
  65. if [ .$wilcard_domain = ."true" ]; then
  66. dehydrated --cron --domain *.$domain_name --preferred-chain "ISRG Root X1" --algo rsa --alias $domain_alias --config /etc/dehydrated/config --out /etc/dehydrated/certs --challenge dns-01 --hook /etc/dehydrated/hook.sh
  67. fi
  68. if [ .$wilcard_domain = ."false" ]; then
  69. dehydrated --cron --preferred-chain "ISRG Root X1" --algo rsa --alias $domain_alias --config /etc/dehydrated/config --config /etc/dehydrated/config --out /etc/dehydrated/certs --challenge http-01
  70. fi
  71. #make sure the nginx ssl directory exists
  72. mkdir -p /etc/nginx/ssl
  73. #update nginx config
  74. sed "s@ssl_certificate /etc/ssl/certs/nginx.crt;@ssl_certificate /etc/dehydrated/certs/$domain_alias/fullchain.pem;@g" -i /etc/nginx/sites-available/fusionpbx
  75. sed "s@ssl_certificate_key /etc/ssl/private/nginx.key;@ssl_certificate_key /etc/dehydrated/certs/$domain_alias/privkey.pem;@g" -i /etc/nginx/sites-available/fusionpbx
  76. #read the config
  77. /usr/sbin/nginx -t && /usr/sbin/nginx -s reload
  78. #setup freeswitch tls
  79. if [ .$switch_tls = ."true" ]; then
  80. #make sure the freeswitch directory exists
  81. mkdir -p /etc/freeswitch/tls
  82. #make sure the freeswitch certificate directory is empty
  83. rm /etc/freeswitch/tls/*
  84. #combine the certs into all.pem
  85. cat /etc/dehydrated/certs/$domain_alias/fullchain.pem > /etc/freeswitch/tls/all.pem
  86. cat /etc/dehydrated/certs/$domain_alias/privkey.pem >> /etc/freeswitch/tls/all.pem
  87. #cat /etc/dehydrated/certs/$domain_alias/chain.pem >> /etc/freeswitch/tls/all.pem
  88. #copy the certificates
  89. cp /etc/dehydrated/certs/$domain_alias/cert.pem /etc/freeswitch/tls
  90. cp /etc/dehydrated/certs/$domain_alias/chain.pem /etc/freeswitch/tls
  91. cp /etc/dehydrated/certs/$domain_alias/fullchain.pem /etc/freeswitch/tls
  92. cp /etc/dehydrated/certs/$domain_alias/privkey.pem /etc/freeswitch/tls
  93. #add symbolic links
  94. ln -s /etc/freeswitch/tls/all.pem /etc/freeswitch/tls/agent.pem
  95. ln -s /etc/freeswitch/tls/all.pem /etc/freeswitch/tls/tls.pem
  96. ln -s /etc/freeswitch/tls/all.pem /etc/freeswitch/tls/wss.pem
  97. ln -s /etc/freeswitch/tls/all.pem /etc/freeswitch/tls/dtls-srtp.pem
  98. #set the permissions
  99. chown -R www-data:www-data /etc/freeswitch/tls
  100. fi