SSL support

This commit is contained in:
overflowerror 2017-11-24 01:43:59 +01:00
parent d96fb0fbe9
commit f31c142167
2 changed files with 47 additions and 22 deletions

View file

@ -1,6 +1,8 @@
#!/bin/bash
settingsfile=$1
ssl="$2"
settingsfile="$1"
eval "$(cat $settingsfile)" # declare settings array
. misc.sh
@ -61,7 +63,7 @@ while true; do
if test $first = 1; then
server[requestMethod]="$(echo "$header" | awk '{ print $1 }')"
server[http]="$(echo "$header" | awk '{ print $3 }' | awk -F/ '{ print $2} ')"
server[https]="off"
server[https]="$ssl"
server[serverProtocol]="$(echo "$header" | awk '{ print $3 }')"
server[request_unchecked]=$(echo "$header" | awk '{ print $2 }')
server[requestURI]="$(realpath -sm "${server[request_unchecked]}")"
@ -329,7 +331,7 @@ fi
length=$(printf "%s" "$content" | wc -c)
if test "${settings[verbose]}" -ge "0"; then
echo "$(date --rfc-3339=ns) - ${server[remoteAddress]}:${server[remotePort]} - ${headers[Host]}${server[queryURI]} - $type - $status - $length bytes" 1>&2
echo "$(date --rfc-3339=ns) - ${server[remoteAddress]}:${server[remotePort]} - ${headers[Host]}${server[requestURI]} - $type - $status - $length bytes" 1>&2
fi
echo -en "HTTP/1.1 $status $(./statusString.sh $status)\r\n"

View file

@ -3,18 +3,31 @@
EXIT_FAILURE=1
EXIT_SUCCESS=0
port=-1
progname="server"
home="./home/"
name="localhost"
admin="admin@localhost"
httpPort=-1
httpsPort=-1
cert="./server.pem"
help() {
cat << EOF
usage: $progname [OPTIONS] --port=PORT
usage: $progname [OPTIONS]
Options:
-p, --port=PORT set port
-h, --home=HOME set home directory
-v, --verbose set to verbose mode
-q, --quiet don't output anything
-p, --http-port=PORT set unencrypted port
-s, --https-port=PORT set encrypted port
-c, --cert=CERT set SSL certificate (pem format) (default: ./server.pem)
-h, --home=HOME set home directory (default: ./home/)
-n, --name=NAME set the name of the server (e.g. example.com) (default: localhost)
--admin=ADMIN set the admin mail address (default: admin@localhost)
-v, --verbose set to verbose mode
-q, --quiet don't output anything (not implemented)
Ether an encrypted or an unencrypted port (or both) has to be given.
EOF
}
@ -27,20 +40,18 @@ echoOnVerbose() {
progname="$0"
OPTS=$(getopt -o "p:vqh:n:" -l "port:,verbose,quiet,home:,name:admin:" -- $@)
OPTS=$(getopt -o "p:vqh:n:s:c:" -l "http-port:,verbose,quiet,home:,name:,admin:,https-port:,cert:" -- $@)
if test $? != 0; then
exit $EXIT_FAILURE
fi
eval set -- "$OPTS"
home="./home/"
name="localhost"
admin="admin@localhost"
while true; do
case "$1" in
-p|--port) port=$2; shift 2;;
-p|--http-port) httpPort=$2; shift 2;;
-s|--https-port) httpsPort=$2; shift 2;;
-c|--cert) cert=$2; shift 2;;
-v|--verbose) verboselevel=$(($verboselevel+1)); shift;;
-q|--quiet) verboselevel=-1; shift;;
-h|--home) home=$2; shift 2;;
@ -50,14 +61,20 @@ while true; do
esac
done
if test "$port" -lt 1; then
if test "$httpPort" -lt 1 -a "$httpsPort" -lt 1; then
help
exit $EXIT_FAILURE
fi
settingsfile="/dev/shm/wserver-$$"
settingsfile="/dev/shm/wserver-$$.settings"
logfile="/dev/shm/wserver-$$.log"
echo -n > "$logfile"
declare -A settings
settings[serverDirectory]="$(pwd)"
settings[logFile]="$logfile"
settings[home]="$home"
settings[name]="$name"
settings[admin]="$admin"
@ -69,9 +86,15 @@ settings[server]="ShellSpider V1"
settings[index]="true"
declare -p settings > $settingsfile
echo "Starting... "
socat $(echoOnVerbose 2 "-vv") tcp-listen:$port,reuseaddr,fork SYSTEM:"./response.sh $settingsfile" > /dev/null
if test $? != 0; then
exit $EXIT_FAILURE
if test ! "$httpPort" -lt 1; then
echo "Starting unencrypted on port $httpPort ..."
socat $(echoOnVerbose 2 "-vv") tcp-listen:$httpPort,reuseaddr,fork SYSTEM:"./response.sh $settingsfile off" > /dev/null &
fi
if test ! "$httpsPort" -lt 1; then
echo "Starting encrypted on port $httpsPort ..."
socat $(echoOnVerbose 2 "-vv") openssl-listen:$httpsPort,verify=0,cert="$cert",reuseaddr,fork SYSTEM:"./response.sh $settingsfile on" > /dev/null &
fi
while true; do
tail -f $logfile
done