Subversion Repositories ALCASAR

Rev

Rev 3300 | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
2260 tom.houday 1
#!/bin/bash
2223 tom.houday 2
#
3
# $Id: alcasar-importcert.sh 3326 2026-03-01 22:35:33Z rexy $
4
#
1710 richard 5
# alcasar-importcert.sh
1736 richard 6
# by Raphaël, Hugo, Clément, Bettyna & rexy
2223 tom.houday 7
#
1710 richard 8
# This script is distributed under the Gnu General Public License (GPL)
2223 tom.houday 9
#
1710 richard 10
# Script permettant
11
# - d'importer des certificats sur Alcasar
1733 richard 12
# - de revenir au certificat par default
2223 tom.houday 13
#
1710 richard 14
# This script allows
1733 richard 15
# - to import a certificate in Alcasar
16
# - to go back to the default certificate
1710 richard 17
 
18
SED="/bin/sed -ri"
19
DIR_CERT="/etc/pki/tls"
1736 richard 20
CONF_FILE="/usr/local/etc/alcasar.conf"
2260 tom.houday 21
PRIVATE_IP_MASK=`grep ^PRIVATE_IP= $CONF_FILE|cut -d"=" -f2`
1736 richard 22
PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`
1710 richard 23
 
2260 tom.houday 24
usage="Usage: alcasar-importcert.sh -i /path/to/certificate.crt -k /path/to/privatekey.key [-c /path/to/serverchain.crt]\n       alcasar-importcert.sh -d (restore default certificate)"
1710 richard 25
nb_args=$#
1733 richard 26
arg1=$1
1710 richard 27
 
1733 richard 28
function defaultCert()
29
{
1740 richard 30
	mv -f $DIR_CERT/certs/alcasar.crt.old $DIR_CERT/certs/alcasar.crt
31
	mv -f $DIR_CERT/private/alcasar.key.old $DIR_CERT/private/alcasar.key
2813 rexy 32
	if [ -f $DIR_CERT/certs/server-chain.pem.old ]
1733 richard 33
	then
2813 rexy 34
		mv $DIR_CERT/certs/server-chain.pem.old $DIR_CERT/certs/server-chain.pem
1733 richard 35
	fi
2554 lucas.echa 36
	(cat $DIR_CERT/private/alcasar.key; echo; cat $DIR_CERT/certs/alcasar.crt) > $DIR_CERT/private/alcasar.pem
2488 lucas.echa 37
	chown root:apache $DIR_CERT/private/alcasar.pem
38
	chmod 750 $DIR_CERT/private/alcasar.pem
1733 richard 39
}
40
 
1710 richard 41
function domainName() # change the domain name in the conf files
42
{
2813 rexy 43
	fqdn=$(openssl x509 -noout -subject -nameopt multiline -in $DIR_CERT/certs/alcasar.crt | grep commonName|cut -d"=" -f2|tr -d ' ')
2260 tom.houday 44
	#check if there is a wildcard in $fqdn
45
	if [[ $fqdn == *"*"* ]];
46
	then
47
		hostname="alcasar"
48
		fqdn=${fqdn/"*"/$hostname}
49
	else
2472 tom.houday 50
		hostname=$(echo $fqdn | cut -d'.' -f1)
2260 tom.houday 51
	fi
2472 tom.houday 52
	domain=$(echo $fqdn | cut -d'.' -f2-)
2260 tom.houday 53
	echo "fqdn=$fqdn hostname=$hostname domain=$domain"
2454 tom.houday 54
	#check fqdn format
2309 tom.houday 55
	if [[ "$fqdn" != "" && "$domain" != "" ]]; then
3326 rexy 56
		$SED "s/^HOSTNAME=.*/HOSTNAME=$hostname/g" $CONF_FILE
57
		$SED "s/^DOMAIN=.*/DOMAIN=$domain/g" $CONF_FILE
58
		$SED "s?^HTTPS_LOGIN=.*?HTTPS_LOGIN=on?" $CONF_FILE
2850 rexy 59
		/usr/local/bin/alcasar-conf.sh --apply
1710 richard 60
	fi
61
}
62
 
63
function certImport()
64
{
1740 richard 65
	if [ ! -f "$DIR_CERT/certs/alcasar.crt.old" ]
1710 richard 66
	then
67
		echo "Backup of old cert (alcasar.crt)"
1740 richard 68
		mv $DIR_CERT/certs/alcasar.crt $DIR_CERT/certs/alcasar.crt.old
1710 richard 69
	fi
1740 richard 70
	if [ ! -f "$DIR_CERT/private/alcasar.key.old" ]
1710 richard 71
	then
72
		echo "Backup of old private key (alcasar.key)"
1740 richard 73
		mv $DIR_CERT/private/alcasar.key $DIR_CERT/private/alcasar.key.old
1710 richard 74
	fi
1740 richard 75
	cp $cert $DIR_CERT/certs/alcasar.crt
76
	cp $key $DIR_CERT/private/alcasar.key
2554 lucas.echa 77
	(cat $DIR_CERT/private/alcasar.key; echo; cat $DIR_CERT/certs/alcasar.crt) > $DIR_CERT/private/alcasar.pem
1740 richard 78
	chown root:apache $DIR_CERT/certs/alcasar.crt
79
	chown root:apache $DIR_CERT/private/alcasar.key
2488 lucas.echa 80
	chown root:apache $DIR_CERT/private/alcasar.pem
1740 richard 81
	chmod 750 $DIR_CERT/certs/alcasar.crt
82
	chmod 750 $DIR_CERT/private/alcasar.key
2488 lucas.echa 83
	chmod 750 $DIR_CERT/private/alcasar.pem
1710 richard 84
	if [ "$sc" != "" ]
85
	then
86
		echo "cert-chain exists"
2813 rexy 87
		if [ ! -f "$DIR_CERT/certs/server-chain.pem.old" ]
1710 richard 88
		then
2813 rexy 89
			echo "Backup of old cert-chain (server-chain.pem)"
90
			mv $DIR_CERT/certs/server-chain.pem $DIR_CERT/certs/server-chain.pem.old
1710 richard 91
		fi
2813 rexy 92
		cp $sc $DIR_CERT/certs/server-chain.pem
93
		chown root:apache $DIR_CERT/certs/server-chain.pem
94
		chmod 750 $DIR_CERT/certs/server-chain.pem
1710 richard 95
	fi
96
}
97
 
1733 richard 98
 
99
if [ $nb_args -eq 0 ]
1710 richard 100
then
2260 tom.houday 101
	echo -e "$usage"
1733 richard 102
	exit 1
1710 richard 103
fi
104
 
1733 richard 105
case $arg1 in
1710 richard 106
	-\? | -h* | --h*)
2260 tom.houday 107
		echo -e "$usage"
1710 richard 108
		exit 0
109
		;;
110
	-i)
1733 richard 111
		arg3=$3
112
		arg5=$5
113
		cert=$2
114
		key=$4
115
		sc=$6
116
 
117
		if [ "$cert" == "" ] || [ "$key" == "" ]
118
		then
2260 tom.houday 119
			echo -e "$usage"
1733 richard 120
			exit 1
121
		fi
122
 
2260 tom.houday 123
		if [ ! -f "$cert" ] || [ ! -f "$key" ]
1733 richard 124
		then
125
			echo "Certificate and/or private key not found"
126
			exit 1
127
		fi
128
 
2261 tom.houday 129
		if [ ${cert: -4} != ".crt" ] && [ ${cert: -4} != ".cer" ]
1733 richard 130
		then
131
			echo "Invalid certificate file"
132
			exit 1
133
		fi
134
 
135
		if [ ${key: -4} != ".key" ]
136
		then
137
			echo "Invalid private key"
138
			exit 1
139
		fi
140
 
2261 tom.houday 141
		if [ "$arg5" != "-c" ] || [ -z "$sc" ]
1733 richard 142
		then
143
			echo "No server-chain given"
144
			echo "Importing certificate $cert with private key $key"
145
			sc=""
146
		else
2261 tom.houday 147
			if [ ! -f "$sc" ]
148
			then
149
				echo "Server-chain certificate not found"
150
				exit 1
151
			fi
2813 rexy 152
			if [ ${sc: -4} != ".crt" ] && [ ${sc: -4} != ".cer" ] && [ ${sc: -4} != ".pem" ]
2261 tom.houday 153
			then
154
				echo "Invalid server-chain certificate file"
155
				exit 1
156
			fi
1733 richard 157
			echo "Importing certificate $cert with private key $key and server-chain $sc"
158
		fi
2813 rexy 159
		certImport 
160
		domainName
1710 richard 161
		;;
1733 richard 162
	-d)
163
		if [ -f "/etc/pki/tls/certs/alcasar.crt.old" -a -f "/etc/pki/tls/private/alcasar.key.old" ]
164
		then
165
			echo "Restoring default certificate"
166
			defaultCert
3326 rexy 167
						cat <<EOF > /usr/local/etc/alcasar-letsencrypt
3300 rexy 168
email=
169
dateIssueRequest=
170
domainRequest=
171
challenge=
172
dateIssued=
173
dnsapi=
174
dateNextRenewal=
175
EOF
3326 rexy 176
			domainName
2813 rexy 177
		else echo "No default cert found"
1733 richard 178
		fi
179
		;;
1710 richard 180
	*)
2260 tom.houday 181
		echo -e "$usage"
1710 richard 182
		;;
183
esac