mirror of
				https://github.com/mail-in-a-box/mailinabox.git
				synced 2025-10-30 18:50:53 +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