adamchilcott icon

SSLConfiguratorForLinux.sh

adamchilcott | PRO | 02/08/19 12:55:39 AM UTC | 0 ⭐ | 949 👁️ | Never ⏰ | []
Bash |

5.14 KB

|

None

|

0 👍

/

0 👎

#!/bin/sh
 
WORKING_DIRECTORY=$(pwd)
SCREENCONNECT_DIRECTORY=${scdir:-/opt/screenconnect}
HTTPLISTENER_DIRECTORY="$SCREENCONNECT_DIRECTORY/App_Runtime/etc/.mono/httplistener"
SCREENCONNECT_KEY="ScreenConnectPrivateKey.key"
SCREENCONNECT_CSR="ScreenConnectCertSignRequest.csr"
SCREENCONNECT_CERT="ScreenConnectCertificate.cer"
 
 
LOG_FILE="SSL_Configurator.log"
printf "\n\n" >> "$LOG_FILE"
date >> "$LOG_FILE"
 
{
 
set -e
 
while true; do
 
    echo Welcome to the ScreenConnect SSL Configurator for Linux.
    echo
    echo What do you want to do?
    echo "1. Change working directory where certificate files are stored."
    echo "   (currently: $WORKING_DIRECTORY )"
    echo
    echo "2. Change directory where ScreenConnect is currently installed."
    echo "   (currently: $SCREENCONNECT_DIRECTORY )"
    echo
    echo "3. Create a private key and generate a certificate signing request (CSR) to send to your certificate authority (CA)."
    echo
    echo "4. Convert and rename your certificate and private key."
    echo 
    echo "5. Install your certificate and private key."
    echo
    echo "6. Edit the web.config file."
    echo
    echo "7. Exit."
    echo
    printf "? "
    read COMMAND
 
    case "$COMMAND" in 
       1) 
         echo "Current working directory: $WORKING_DIRECTORY"
         echo "Enter new working directory:"
         printf "?"
         read WORKING_DIRECTORY
         if [ ! -d "$WORKING_DIRECTORY" ];
            then
               echo "Directory $WORKING_DIRECTORY not found."
               break;
            fi       
         echo "Changed working directory to $WORKING_DIRECTORY."
         echo
         sleep 2
         ;;
       2) 
         echo "Current ScreenConnect installation directory: $SCREENCONNECT_DIRECTORY"
         echo "Enter new ScreenConnect directory."
         printf '? '     
         read SCREENCONNECT_DIRECTORY
         if [ ! -d "$SCREENCONNECT_DIRECTORY" ];
            then
               echo "Directory $SCREENCONNECT_DIRECTORY not found."
               break;
            fi
         echo "Changed ScreenConnect directory to $SCREENCONNECT_DIRECTORY."
         echo
         sleep 2
         ;;
       3)
        echo "Creating a new private key and CSR"
        echo 
        openssl genrsa -out "$WORKING_DIRECTORY"/"$SCREENCONNECT_KEY" 2048 2>&1 tee "$LOG_FILE"
        echo 
         
        echo "Now generating $SCREENCONNECT_CSR..."
        openssl req -new -key "$WORKING_DIRECTORY"/"$SCREENCONNECT_KEY" -sha256 -out "$WORKING_DIRECTORY"/"$SCREENCONNECT_CSR"
        if [ -f "$WORKING_DIRECTORY/$SCREENCONNECT_CSR" ];  
           then 
              echo "Created $WORKING_DIRECTORY/$SCREENCONNECT_KEY and $WORKING_DIRECTORY/$SCREENCONNECT_CSR"
              echo "Send $SCREENCONNECT_CSR to your certificate authority. When you receive your server certificate, name it $SCREENCONNECT_CERT and put it in your working directory ($WORKING_DIRECTORY)."
              echo 
              sleep 2
           else
              printf "\nThere was a problem creating $WORKING_DIRECTORY/$SCREENCONNECT_CSR\n"
           fi
         ;;     
       4)
         echo "Searching for $SCREENCONNECT_CERT..."
         if [ -f "$WORKING_DIRECTORY/$SCREENCONNECT_CERT" ];
            then
               echo "Making sure your certificate and private key match..."
               
               KEY_HASH="$( openssl rsa -noout -modulus -in "$WORKING_DIRECTORY/$SCREENCONNECT_KEY" | openssl md5 )"
               CERT_HASH="$( openssl x509 -noout -modulus -in "$WORKING_DIRECTORY/$SCREENCONNECT_CERT" | openssl md5 )"
               
               if [ "$KEY_HASH" != "$CERT_HASH" ];
                  then 
                    echo "Your certificate does not match your private key."
                    break
                  fi
               echo "Converting $SCREENCONNECT_KEY to PVK file..."
               openssl rsa -in "$WORKING_DIRECTORY"/"$SCREENCONNECT_KEY" -inform PEM -outform PVK -pvk-none -out "$WORKING_DIRECTORY/443.pvk"
               
               if [ ! -f "$WORKING_DIRECTORY/443.pvk" ];
                  then
                     echo "Could not create $WORKING_DIRECTORY/443.pvk"
                     break
                  fi 
                   
         
               echo "Copying and renaming $SCREENCONNECT_CERT to 443.cer..."
               cp "$WORKING_DIRECTORY/$SCREENCONNECT_CERT" "$WORKING_DIRECTORY/443.cer"
               
               echo "Done. Returning to menu."
               sleep 2
               echo 
               
            else
               echo "Could not find $WORKING_DIRECTORY/$SCREENCONNECT_CERT. Remember to rename your server certificate to $SCREENCONNECT_CERT."
               
            fi
         
         ;;
 
       5)
          echo "Moving 443.cer and 443.pvk to $SCREENCONNECT_DIRECTORY/httplistener..."
          mkdir -p "$HTTPLISTENER_DIRECTORY"
          mv -t "$HTTPLISTENER_DIRECTORY" "$WORKING_DIRECTORY"/"443.cer" "$WORKING_DIRECTORY"/"443.pvk"
          echo "Done."
          echo 
          sleep 2
          ;;
       
       6)
         echo "Creating a backup of the web.config file..."
         cp "$SCREENCONNECT_DIRECTORY/web.config" "$WORKING_DIRECTORY/web.config.$(date +%s).backup" 
         echo "Setting WebServerListenUri to https://+:443/..."
         sed -i -r 's|(WebServerListenUri.*value=)"[^"]*"|\1"https://+:443/"|' "$SCREENCONNECT_DIRECTORY/web.config"
         echo "Completed."
         echo "Restart the screenconnect services with one of the following commands:"
         echo "sudo service screenconnect restart"
         echo "OR"
         echo "sudo /etc/init.d/screenconnect stop"
         echo "sudo /etc/init.d/screenconnect start"
         echo 
         sleep 2
         ;;
       7)
         break
         ;;
       "")
         ;;
       *) 
         echo 'Invalid input'
         exit 1
          ;;
    esac
    
done
}  2>&1 | tee -a "$LOG_FILE"

Comments