| 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
|
| 1736 |
richard |
36 |
$SED "s/^domain=.*/domain=localdomain/g" /etc/dnsmasq.conf /etc/dnsmasq-blackhole.conf /etc/dnsmasq-blacklist.conf /etc/dnsmasq-whitelist.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/^domain.*/domain\t\t$domain/g" /etc/chilli.conf
|
|
|
80 |
$SED "s/^locationname.*/locationname\t$fqdn/g" /etc/chilli.conf
|
|
|
81 |
$SED "s/^uamserver.*/uamserver\thttps:\/\/$fqdn\/intercept.php/g" /etc/chilli.conf
|
|
|
82 |
$SED "s/^radiusnasid.*/radiusnasid\t$fqdn/g" /etc/chilli.conf
|
|
|
83 |
$SED "s/^uamallowed.*/uamallowed\t$hostname,$fqdn/g" /etc/chilli.conf
|
|
|
84 |
$SED "s/^ServerName.*/ServerName $fqdn/g" /etc/httpd/conf/httpd.conf
|
|
|
85 |
$SED "s/^domain=.*/domain=$domain/g" /etc/dnsmasq.conf /etc/dnsmasq-blackhole.conf /etc/dnsmasq-blacklist.conf /etc/dnsmasq-whitelist.conf
|
| 1740 |
richard |
86 |
hostnamectl set-hostname $fqdn
|
|
|
87 |
$SED "s/^\tErrorDocument.*/\tErrorDocument 404 https:\/\/$fqdn\//g" /etc/httpd/conf/webapps.d/alcasar.conf
|
| 1747 |
richard |
88 |
$SED "s/^\tAuthDigestDomain.*/\tAuthDigestDomain $fqdn/g" /etc/httpd/conf/webapps.d/alcasar.conf
|
|
|
89 |
$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 |
90 |
fi
|
|
|
91 |
}
|
|
|
92 |
|
|
|
93 |
function certImport()
|
|
|
94 |
{
|
| 1740 |
richard |
95 |
if [ ! -f "$DIR_CERT/certs/alcasar.crt.old" ]
|
| 1710 |
richard |
96 |
then
|
|
|
97 |
echo "Backup of old cert (alcasar.crt)"
|
| 1740 |
richard |
98 |
mv $DIR_CERT/certs/alcasar.crt $DIR_CERT/certs/alcasar.crt.old
|
| 1710 |
richard |
99 |
fi
|
| 1740 |
richard |
100 |
if [ ! -f "$DIR_CERT/private/alcasar.key.old" ]
|
| 1710 |
richard |
101 |
then
|
|
|
102 |
echo "Backup of old private key (alcasar.key)"
|
| 1740 |
richard |
103 |
mv $DIR_CERT/private/alcasar.key $DIR_CERT/private/alcasar.key.old
|
| 1710 |
richard |
104 |
fi
|
| 1740 |
richard |
105 |
cp $cert $DIR_CERT/certs/alcasar.crt
|
|
|
106 |
cp $key $DIR_CERT/private/alcasar.key
|
| 1733 |
richard |
107 |
|
| 1743 |
clement.si |
108 |
rm $cert $key
|
|
|
109 |
|
| 1740 |
richard |
110 |
chown root:apache $DIR_CERT/certs/alcasar.crt
|
|
|
111 |
chown root:apache $DIR_CERT/private/alcasar.key
|
| 1710 |
richard |
112 |
|
| 1740 |
richard |
113 |
chmod 750 $DIR_CERT/certs/alcasar.crt
|
|
|
114 |
chmod 750 $DIR_CERT/private/alcasar.key
|
| 1710 |
richard |
115 |
if [ "$sc" != "" ]
|
|
|
116 |
then
|
|
|
117 |
echo "cert-chain exists"
|
| 1740 |
richard |
118 |
if [ ! -f "$DIR_CERT/certs/server-chain.crt.old" ]
|
| 1710 |
richard |
119 |
then
|
|
|
120 |
echo "Backup of old cert-chain (server-chain.crt)"
|
| 1740 |
richard |
121 |
mv $DIR_CERT/certs/server-chain.crt $DIR_CERT/certs/server-chain.crt.old
|
| 1710 |
richard |
122 |
fi
|
| 1740 |
richard |
123 |
cp $sc $DIR_CERT/certs/server-chain.crt
|
| 1743 |
clement.si |
124 |
rm $sc
|
| 1740 |
richard |
125 |
chown root:apache $DIR_CERT/certs/server-chain.crt
|
|
|
126 |
chmod 750 $DIR_CERT/certs/server-chain.crt
|
| 1710 |
richard |
127 |
fi
|
|
|
128 |
}
|
|
|
129 |
|
| 1733 |
richard |
130 |
|
|
|
131 |
if [ $nb_args -eq 0 ]
|
| 1710 |
richard |
132 |
then
|
| 1733 |
richard |
133 |
echo "$usage"
|
|
|
134 |
exit 1
|
| 1710 |
richard |
135 |
fi
|
|
|
136 |
|
| 1733 |
richard |
137 |
case $arg1 in
|
| 1710 |
richard |
138 |
-\? | -h* | --h*)
|
|
|
139 |
echo "$usage"
|
|
|
140 |
exit 0
|
|
|
141 |
;;
|
|
|
142 |
-i)
|
| 1733 |
richard |
143 |
arg3=$3
|
|
|
144 |
arg5=$5
|
|
|
145 |
cert=$2
|
|
|
146 |
key=$4
|
|
|
147 |
sc=$6
|
|
|
148 |
|
|
|
149 |
if [ "$cert" == "" ] || [ "$key" == "" ]
|
|
|
150 |
then
|
|
|
151 |
echo "$usage"
|
|
|
152 |
exit 1
|
|
|
153 |
fi
|
|
|
154 |
|
|
|
155 |
if [ ! -f "$cert" -o ! -f "$key" ]
|
|
|
156 |
then
|
|
|
157 |
echo "Certificate and/or private key not found"
|
|
|
158 |
exit 1
|
|
|
159 |
fi
|
|
|
160 |
|
|
|
161 |
if [ ${cert: -4} != ".crt" ]
|
|
|
162 |
then
|
|
|
163 |
echo "Invalid certificate file"
|
|
|
164 |
exit 1
|
|
|
165 |
fi
|
|
|
166 |
|
|
|
167 |
if [ ${key: -4} != ".key" ]
|
|
|
168 |
then
|
|
|
169 |
echo "Invalid private key"
|
|
|
170 |
exit 1
|
|
|
171 |
fi
|
|
|
172 |
|
|
|
173 |
if [ "$arg5" != "-c" ] || [ ! -f "$sc" ]
|
|
|
174 |
then
|
|
|
175 |
echo "No server-chain given"
|
|
|
176 |
echo "Importing certificate $cert with private key $key"
|
|
|
177 |
sc=""
|
|
|
178 |
else
|
|
|
179 |
echo "Importing certificate $cert with private key $key and server-chain $sc"
|
|
|
180 |
fi
|
|
|
181 |
domainName $cert
|
|
|
182 |
certImport $cert $key $sc
|
| 1765 |
richard |
183 |
for services in chilli dnsmasq dnsmasq-blackhole dnsmasq-blacklist dnsmasq-whitelist httpd
|
| 1740 |
richard |
184 |
do
|
|
|
185 |
echo "restarting $services"; systemctl restart $services; sleep 1
|
|
|
186 |
done
|
| 1710 |
richard |
187 |
;;
|
| 1733 |
richard |
188 |
-d)
|
|
|
189 |
if [ -f "/etc/pki/tls/certs/alcasar.crt.old" -a -f "/etc/pki/tls/private/alcasar.key.old" ]
|
|
|
190 |
then
|
|
|
191 |
echo "Restoring default certificate"
|
|
|
192 |
defaultCert
|
|
|
193 |
defaultNdd
|
| 1765 |
richard |
194 |
for services in chilli dnsmasq dnsmasq-blackhole dnsmasq-blacklist dnsmasq-whitelist httpd
|
| 1740 |
richard |
195 |
do
|
|
|
196 |
echo "restarting $services"; systemctl restart $services; sleep 1
|
|
|
197 |
done
|
| 1733 |
richard |
198 |
fi
|
|
|
199 |
;;
|
| 1710 |
richard |
200 |
*)
|
|
|
201 |
echo "$usage"
|
|
|
202 |
;;
|
|
|
203 |
esac
|