| 1710 |
richard |
1 |
#!/bin/sh
|
|
|
2 |
|
|
|
3 |
# alcasar-importcert.sh
|
| 1736 |
richard |
4 |
# by Raphaël, Hugo, Clément, Bettyna & rexy
|
| 1710 |
richard |
5 |
|
|
|
6 |
# This script is distributed under the Gnu General Public License (GPL)
|
|
|
7 |
|
|
|
8 |
# Script permettant
|
|
|
9 |
# - d'importer des certificats sur Alcasar
|
| 1733 |
richard |
10 |
# - de revenir au certificat par default
|
| 1710 |
richard |
11 |
|
|
|
12 |
# This script allows
|
| 1733 |
richard |
13 |
# - to import a certificate in Alcasar
|
|
|
14 |
# - to go back to the default certificate
|
| 1710 |
richard |
15 |
|
|
|
16 |
SED="/bin/sed -ri"
|
|
|
17 |
DIR_CERT="/etc/pki/tls"
|
| 1736 |
richard |
18 |
CONF_FILE="/usr/local/etc/alcasar.conf"
|
|
|
19 |
PRIVATE_IP_MASK=`grep PRIVATE_IP $CONF_FILE|cut -d"=" -f2`
|
|
|
20 |
PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`
|
| 1747 |
richard |
21 |
DEFAULT_FQDN='alcasar.localdomain'
|
| 1710 |
richard |
22 |
|
| 1733 |
richard |
23 |
usage="Usage: alcasar-importcert.sh -i /path/to/certificate.crt -k /path/to/privatekey.key (-c /path/to/serverchain.crt) || alcasar-importcert.sh -d (Cette utilisation permet de revenir au certificat par default)"
|
| 1710 |
richard |
24 |
nb_args=$#
|
| 1733 |
richard |
25 |
arg1=$1
|
| 1710 |
richard |
26 |
|
| 1733 |
richard |
27 |
|
|
|
28 |
function defaultNdd()
|
|
|
29 |
{
|
| 1758 |
richard |
30 |
$SED "s/^HOSTNAME=.*/HOSTNAME=alcasar/g" /usr/local/etc/alcasar.conf
|
|
|
31 |
$SED "s/^DOMAIN=.*/DOMAIN=localdomain/g" /usr/local/etc/alcasar.conf
|
|
|
32 |
$SED "s/\.([a-zA-Z][a-zA-Z0-9-]+(\.[a-z]{2,4})?)/.localdomain/g" /etc/hosts
|
|
|
33 |
$SED "s/alcasar\.([a-zA-Z0-9-]+(\.[a-z]{2,4})?)/alcasar.localdomain/g" /etc/chilli.conf
|
|
|
34 |
$SED "s/^domain.*/domain\t\tlocaldomain/g" /etc/chilli.conf
|
|
|
35 |
$SED "s/^ServerName.*/ServerName alcasar.localdomain/g" /etc/httpd/conf/httpd.conf
|
| 1961 |
richard |
36 |
$SED "s/^domain=.*/domain=localdomain/g" /etc/dnsmasq.conf
|
| 1740 |
richard |
37 |
hostnamectl set-hostname alcasar.localdomain
|
|
|
38 |
$SED "s/^\tErrorDocument.*/\tErrorDocument 404 https:\/\/alcasar.localdomain\//g" /etc/httpd/conf/webapps.d/alcasar.conf
|
| 1747 |
richard |
39 |
$SED "s/^\tAuthDigestDomain.*/\tAuthDigestDomain alcasar.localdomain/g" /etc/httpd/conf/webapps.d/alcasar.conf
|
|
|
40 |
$SED "s/^ ServerName.*/ ServerName alcasar.localdomain/g" /etc/httpd/conf/sites.d/00_default_vhosts.conf /etc/httpd/conf/sites.d/00_default_ssl_vhost.conf
|
| 1733 |
richard |
41 |
}
|
|
|
42 |
|
|
|
43 |
function defaultCert()
|
|
|
44 |
{
|
| 1740 |
richard |
45 |
mv -f $DIR_CERT/certs/alcasar.crt.old $DIR_CERT/certs/alcasar.crt
|
|
|
46 |
mv -f $DIR_CERT/private/alcasar.key.old $DIR_CERT/private/alcasar.key
|
|
|
47 |
if [ -f $DIR_CERT/certs/server-chain.crt.old ]
|
| 1733 |
richard |
48 |
then
|
| 1740 |
richard |
49 |
mv $DIR_CERT/certs/server-chain.crt.old $DIR_CERT/certs/server-chain.crt
|
| 1743 |
clement.si |
50 |
#else
|
|
|
51 |
# rm -f $DIR_CERT/certs/server-chain.crt
|
| 1733 |
richard |
52 |
fi
|
|
|
53 |
}
|
|
|
54 |
|
| 1710 |
richard |
55 |
function domainName() # change the domain name in the conf files
|
|
|
56 |
{
|
| 1744 |
clement.si |
57 |
fqdn=$(openssl x509 -noout -subject -in $cert | sed -n '/^subject/s/^.*CN=//p' | cut -d'/' -f 1)
|
| 1934 |
raphael.pi |
58 |
|
|
|
59 |
#check if there is a wildcard in $fqdn
|
| 1941 |
raphael.pi |
60 |
if [[ $fqdn == *"*"* ]];
|
| 1934 |
raphael.pi |
61 |
then
|
|
|
62 |
hostname="alcasar"
|
| 1941 |
raphael.pi |
63 |
fqdn=${fqdn/"*"/$hostname}
|
| 1934 |
raphael.pi |
64 |
else
|
|
|
65 |
hostname=`echo $fqdn | awk -F'.' '{ print $1 }'`
|
|
|
66 |
fi
|
|
|
67 |
domain=`echo $fqdn | awk -F'.' '{$1="";OFS=".";print $0}' |sed 's/^.//'`
|
|
|
68 |
echo "fqdn=$fqdn hostname=$hostname domain=$domain"
|
|
|
69 |
|
|
|
70 |
#check fqdn format
|
|
|
71 |
if [[ "$fqdn" != "" && "$domain" != "" && "$hostname" == "alcasar" ]];
|
| 1733 |
richard |
72 |
then
|
| 1758 |
richard |
73 |
$SED "s/^HOSTNAME=.*/HOSTNAME=$hostname/g" /usr/local/etc/alcasar.conf
|
| 1736 |
richard |
74 |
$SED "s/^DOMAIN=.*/DOMAIN=$domain/g" /usr/local/etc/alcasar.conf
|
|
|
75 |
cat <<EOF > /etc/hosts
|
|
|
76 |
127.0.0.1 localhost
|
|
|
77 |
$PRIVATE_IP $fqdn $hostname
|
|
|
78 |
EOF
|
|
|
79 |
$SED "s/^locationname.*/locationname\t$fqdn/g" /etc/chilli.conf
|
|
|
80 |
$SED "s/^uamserver.*/uamserver\thttps:\/\/$fqdn\/intercept.php/g" /etc/chilli.conf
|
|
|
81 |
$SED "s/^radiusnasid.*/radiusnasid\t$fqdn/g" /etc/chilli.conf
|
|
|
82 |
$SED "s/^uamallowed.*/uamallowed\t$hostname,$fqdn/g" /etc/chilli.conf
|
|
|
83 |
$SED "s/^ServerName.*/ServerName $fqdn/g" /etc/httpd/conf/httpd.conf
|
| 1740 |
richard |
84 |
hostnamectl set-hostname $fqdn
|
|
|
85 |
$SED "s/^\tErrorDocument.*/\tErrorDocument 404 https:\/\/$fqdn\//g" /etc/httpd/conf/webapps.d/alcasar.conf
|
| 1747 |
richard |
86 |
$SED "s/^\tAuthDigestDomain.*/\tAuthDigestDomain $fqdn/g" /etc/httpd/conf/webapps.d/alcasar.conf
|
|
|
87 |
$SED "s/^ ServerName.*/ ServerName $fqdn/g" /etc/httpd/conf/sites.d/00_default_vhosts.conf /etc/httpd/conf/sites.d/00_default_ssl_vhost.conf /etc/httpd/conf/vhosts-ssl.default
|
| 1710 |
richard |
88 |
fi
|
|
|
89 |
}
|
|
|
90 |
|
|
|
91 |
function certImport()
|
|
|
92 |
{
|
| 1740 |
richard |
93 |
if [ ! -f "$DIR_CERT/certs/alcasar.crt.old" ]
|
| 1710 |
richard |
94 |
then
|
|
|
95 |
echo "Backup of old cert (alcasar.crt)"
|
| 1740 |
richard |
96 |
mv $DIR_CERT/certs/alcasar.crt $DIR_CERT/certs/alcasar.crt.old
|
| 1710 |
richard |
97 |
fi
|
| 1740 |
richard |
98 |
if [ ! -f "$DIR_CERT/private/alcasar.key.old" ]
|
| 1710 |
richard |
99 |
then
|
|
|
100 |
echo "Backup of old private key (alcasar.key)"
|
| 1740 |
richard |
101 |
mv $DIR_CERT/private/alcasar.key $DIR_CERT/private/alcasar.key.old
|
| 1710 |
richard |
102 |
fi
|
| 1740 |
richard |
103 |
cp $cert $DIR_CERT/certs/alcasar.crt
|
|
|
104 |
cp $key $DIR_CERT/private/alcasar.key
|
| 1733 |
richard |
105 |
|
| 1743 |
clement.si |
106 |
rm $cert $key
|
|
|
107 |
|
| 1740 |
richard |
108 |
chown root:apache $DIR_CERT/certs/alcasar.crt
|
|
|
109 |
chown root:apache $DIR_CERT/private/alcasar.key
|
| 1710 |
richard |
110 |
|
| 1740 |
richard |
111 |
chmod 750 $DIR_CERT/certs/alcasar.crt
|
|
|
112 |
chmod 750 $DIR_CERT/private/alcasar.key
|
| 1710 |
richard |
113 |
if [ "$sc" != "" ]
|
|
|
114 |
then
|
|
|
115 |
echo "cert-chain exists"
|
| 1740 |
richard |
116 |
if [ ! -f "$DIR_CERT/certs/server-chain.crt.old" ]
|
| 1710 |
richard |
117 |
then
|
|
|
118 |
echo "Backup of old cert-chain (server-chain.crt)"
|
| 1740 |
richard |
119 |
mv $DIR_CERT/certs/server-chain.crt $DIR_CERT/certs/server-chain.crt.old
|
| 1710 |
richard |
120 |
fi
|
| 1740 |
richard |
121 |
cp $sc $DIR_CERT/certs/server-chain.crt
|
| 1743 |
clement.si |
122 |
rm $sc
|
| 1740 |
richard |
123 |
chown root:apache $DIR_CERT/certs/server-chain.crt
|
|
|
124 |
chmod 750 $DIR_CERT/certs/server-chain.crt
|
| 1710 |
richard |
125 |
fi
|
|
|
126 |
}
|
|
|
127 |
|
| 1733 |
richard |
128 |
|
|
|
129 |
if [ $nb_args -eq 0 ]
|
| 1710 |
richard |
130 |
then
|
| 1733 |
richard |
131 |
echo "$usage"
|
|
|
132 |
exit 1
|
| 1710 |
richard |
133 |
fi
|
|
|
134 |
|
| 1733 |
richard |
135 |
case $arg1 in
|
| 1710 |
richard |
136 |
-\? | -h* | --h*)
|
|
|
137 |
echo "$usage"
|
|
|
138 |
exit 0
|
|
|
139 |
;;
|
|
|
140 |
-i)
|
| 1733 |
richard |
141 |
arg3=$3
|
|
|
142 |
arg5=$5
|
|
|
143 |
cert=$2
|
|
|
144 |
key=$4
|
|
|
145 |
sc=$6
|
|
|
146 |
|
|
|
147 |
if [ "$cert" == "" ] || [ "$key" == "" ]
|
|
|
148 |
then
|
|
|
149 |
echo "$usage"
|
|
|
150 |
exit 1
|
|
|
151 |
fi
|
|
|
152 |
|
|
|
153 |
if [ ! -f "$cert" -o ! -f "$key" ]
|
|
|
154 |
then
|
|
|
155 |
echo "Certificate and/or private key not found"
|
|
|
156 |
exit 1
|
|
|
157 |
fi
|
|
|
158 |
|
|
|
159 |
if [ ${cert: -4} != ".crt" ]
|
|
|
160 |
then
|
|
|
161 |
echo "Invalid certificate file"
|
|
|
162 |
exit 1
|
|
|
163 |
fi
|
|
|
164 |
|
|
|
165 |
if [ ${key: -4} != ".key" ]
|
|
|
166 |
then
|
|
|
167 |
echo "Invalid private key"
|
|
|
168 |
exit 1
|
|
|
169 |
fi
|
|
|
170 |
|
|
|
171 |
if [ "$arg5" != "-c" ] || [ ! -f "$sc" ]
|
|
|
172 |
then
|
|
|
173 |
echo "No server-chain given"
|
|
|
174 |
echo "Importing certificate $cert with private key $key"
|
|
|
175 |
sc=""
|
|
|
176 |
else
|
|
|
177 |
echo "Importing certificate $cert with private key $key and server-chain $sc"
|
|
|
178 |
fi
|
|
|
179 |
domainName $cert
|
|
|
180 |
certImport $cert $key $sc
|
| 1765 |
richard |
181 |
for services in chilli dnsmasq dnsmasq-blackhole dnsmasq-blacklist dnsmasq-whitelist httpd
|
| 1740 |
richard |
182 |
do
|
|
|
183 |
echo "restarting $services"; systemctl restart $services; sleep 1
|
|
|
184 |
done
|
| 1710 |
richard |
185 |
;;
|
| 1733 |
richard |
186 |
-d)
|
|
|
187 |
if [ -f "/etc/pki/tls/certs/alcasar.crt.old" -a -f "/etc/pki/tls/private/alcasar.key.old" ]
|
|
|
188 |
then
|
|
|
189 |
echo "Restoring default certificate"
|
|
|
190 |
defaultCert
|
|
|
191 |
defaultNdd
|
| 1765 |
richard |
192 |
for services in chilli dnsmasq dnsmasq-blackhole dnsmasq-blacklist dnsmasq-whitelist httpd
|
| 1740 |
richard |
193 |
do
|
|
|
194 |
echo "restarting $services"; systemctl restart $services; sleep 1
|
|
|
195 |
done
|
| 1733 |
richard |
196 |
fi
|
|
|
197 |
;;
|
| 1710 |
richard |
198 |
*)
|
|
|
199 |
echo "$usage"
|
|
|
200 |
;;
|
|
|
201 |
esac
|