mirror of
https://github.com/mail-in-a-box/mailinabox.git
synced 2025-04-29 04:17:07 +00:00
Merge 5caa176291
into 18f1689f45
This commit is contained in:
commit
cc805e01ac
110
tools/ssl_dhec.sh
Executable file
110
tools/ssl_dhec.sh
Executable file
@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Author by JKO Email: jonathan@kosar.email
|
||||
# This script tool enables DHEC for SSL on Nginx.
|
||||
# A user can also add a more hardened SSL cipher suite.
|
||||
# Otherwise a default 2048 EC key is generated and added to nginx-ssl.conf.
|
||||
# No suite or protocols are changed. Only in hardened mode they are changed.
|
||||
# But only clients that support the suites will be able to connect, please remember that.
|
||||
# http://www.roushtech.net/2014/04/01/100-qualys-ssl-test-a/
|
||||
# See usage command for more.
|
||||
# Sidenote: -h -b 2048 will produce a hardened settings with 2048 bit key.
|
||||
|
||||
source /etc/mailinabox.conf # load global vars
|
||||
source setup/functions.sh #functions
|
||||
|
||||
apt_install openssl
|
||||
|
||||
nginx_ssl_conf=/etc/nginx/nginx-ssl.conf
|
||||
DEFAULT_BIT_SIZE=2048
|
||||
isHardened="false"
|
||||
hardened_ciphers="'ECDH+AESGCM256:DH+AESGCM256:ECDH+AES256:SH+AES256:RSA+AESGCM256:RSA+AES256:!aNULL:!MD5:!kEDH';"
|
||||
hardened_protocol="TLSv1.2;"
|
||||
|
||||
DHEC_path=$STORAGE_ROOT/ssl/dhparam.pem
|
||||
|
||||
# Functions
|
||||
update_config()
|
||||
{
|
||||
lineNUM=$(grep -n "$2" $1 | tail -n1 | sed 's/:.*//')
|
||||
[ "$lineNUM" ] || lineNUM="$"
|
||||
sed -i -r "$lineNUM s|#?(.*)|#\1\n$4\n$2 $3|" "$1"
|
||||
}
|
||||
|
||||
ok()
|
||||
{
|
||||
echo -e '\e[32m'$1'\e[m';
|
||||
}
|
||||
|
||||
|
||||
# Usage info
|
||||
usage()
|
||||
{
|
||||
cat << EOF
|
||||
Usage: ${0##*/} [-h] [-b BIT_SIZE] [-p DIR_DHEC_KEY] [-c DIR_NGINX_SSL]
|
||||
This script generates and enables DHEC for Nginx. Defaulted to 2048 key.
|
||||
Hardened mode will generate 4096 key and the following cipher suites:
|
||||
'ECDH+AESGCM256:DH+AESGCM256:ECDH+AES256:SH+AES256:RSA+AESGCM256:RSA+AES256:!aNULL:!MD5:!kEDH'
|
||||
|
||||
-h Enable hardened ciphers and 4096 bit key.
|
||||
-b Specify the bit size to generate which will override any other default.
|
||||
-p Specify dir to generate the DHEC key.
|
||||
-c Specify dir nginx ssl conf is.
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "hb:c:p:" opt ; do
|
||||
case "${opt}" in
|
||||
b)
|
||||
BIT_SIZE=${OPTARG}
|
||||
if [ -z "${OPTARG}" ]; then
|
||||
usage
|
||||
fi
|
||||
;;
|
||||
h)
|
||||
isHardened=true
|
||||
BIT_SIZE=4096
|
||||
;;
|
||||
p)
|
||||
DHEC_path=${OPTARG}
|
||||
if [ -z "${OPTARG}" ]; then
|
||||
usage
|
||||
fi
|
||||
;;
|
||||
c)
|
||||
nginx_ssl_conf=${OPTARG}
|
||||
if [ -z "${OPTARG}" ]; then
|
||||
usage
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ -z "${BIT_SIZE}" -a "true" == ${isHardened} ]; then
|
||||
BIT_SIZE=4096
|
||||
elif [ -z "${BIT_SIZE}" ]; then
|
||||
BIT_SIZE=$DEFAULT_BIT_SIZE
|
||||
fi
|
||||
|
||||
ok "❯❯❯ It might take a while, grab a coffee!"
|
||||
|
||||
if [ ! -f $DHEC_path ]; then
|
||||
# Generate a 4096 bit random parameter for DH elliptic curves.
|
||||
# Generated by OpenSSL with the following command:
|
||||
# openssl dhparam -outform pem -out dhparam.pem 2048
|
||||
# openssl dhparam -outform pem -out dhparam.pem 4096
|
||||
openssl dhparam -outform pem -out $DHEC_path $BIT_SIZE
|
||||
fi
|
||||
update_config $nginx_ssl_conf ssl_dhparam $DHEC_path';' "#Path to DHEC key"
|
||||
|
||||
if [ $isHardened == "true" ]; then
|
||||
update_config $nginx_ssl_conf ssl_ciphers $hardened_ciphers "#Hardened SSL Ciphers DHEC"
|
||||
update_config $nginx_ssl_conf ssl_protocols $hardened_protocol "#Hardened SSL Protocol"
|
||||
fi
|
||||
|
||||
service nginx reload
|
Loading…
Reference in New Issue
Block a user