-
Notifications
You must be signed in to change notification settings - Fork 10
/
spidMetadataSigner.sh
executable file
·133 lines (110 loc) · 3.47 KB
/
spidMetadataSigner.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
set -e
echo -e "\n"
echo "==============================================="
echo " AgID Agenzia per l'Italia Digitale "
echo " Presidenza del Consiglio dei Ministri "
echo "==============================================="
echo " SPID Sistema Pubblico di Identità Digitale "
echo "==============================================="
echo " SPID Metadata Signer v1.0 "
echo "==============================================="
echo -e "\n"
metadataInDir="metadata/metadata-in"
metadataOutDir="metadata/metadata-out/"
certsDir="certs"
function testfile {
if [ ! -f $1 ] && [ ! -d $1 ] ; then
echo "Il file $1 non esiste"
exit 1
fi
}
function testexecutable {
if [ -z $(which $1) ] && [ ! -x $1 ]; then
echo "Il comando $1 non è disponibile"
exit 1
fi
}
if [ -f .config ]; then
source .config
fi
# Nome del file metadata
while [ -z "$metadataFileName" ]
do
read -p "> Digita il nome del metadata da firmare (con estensione es: .xml): " metadataFileName
done
echo -e "\n"
testfile "$metadataInDir/$metadataFileName"
# Nome della chiave
while [ -z "$keyName" ]
do
read -p "> Digita il nome della chiave (con estensione es: .key): " keyName
done
echo -e "\n"
testfile "$certsDir/$keyName"
if [ -z ${keyPass+x} ] ; then
# Password della chiave (non specificare se non presente)
read -s -p "> Digita la password della chiave (se presente): " keyPass
if [ ! -z "$keyPass" ]; then
commandPass="--keyPassword $keyPass"
fi
fi
echo -e "\n"
# Nome del certificato
while [ -z "$crtName" ]
do
read -p "> Digita il nome del certificato (con estensione es: .crt): " crtName
done
echo -e "\n"
testfile "$certsDir/$crtName"
# Controllo se JAVA è installato
if type -p java; then
echo -e "Java installato sul sistema\n"
else
echo -e "Java non installato sul sistema. Installarlo e riprovare!\n"
exit 1
fi
# Controllo se Unzip è installato
if type -p unzip; then
echo -e "Unzip installato sul sistema\n"
else
echo -e "Unzip non installato sul sistema. Installarlo e riprovare!\n"
exit 1
fi
# Controllo JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
if [ "$(uname)" == "Darwin" ]; then
javaHomeTip=$(/usr/libexec/java_home)
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
javaHomeTip=$(dirname $(dirname $(readlink -f $(which javac))))
fi
# Impostazione del JAVA_HOME
while [ -z "$javaHome" ]
do
read -p "> Digita il JAVA_HOME (suggerimento: $javaHomeTip): " javaHome
done
export JAVA_HOME=$javaHome
fi
echo -e "\n"
testfile "$javaHome"
testexecutable "curl"
# Download e installazione XmlSecTool 2.0.0
if [ ! -d "xmlsectool-2.0.0" ]; then
echo "Scaricamento XmlSecTool 2.0.0:"
curl -OJ https://shibboleth.net/downloads/tools/xmlsectool/2.0.0/xmlsectool-2.0.0-bin.zip
unzip -qq xmlsectool-2.0.0-bin.zip
rm -f xmlsectool-2.0.0-bin.zip
echo -e "\n"
fi
metadataIn="$metadataInDir/$metadataFileName"
signedMetadataFileName="$(echo $metadataFileName | sed 's/.xml//')-signed.xml"
metadataOut="$metadataOutDir/$signedMetadataFileName"
# Firma del metadata
echo "Firma del metadata: $metadataIn"
./xmlsectool-2.0.0/xmlsectool.sh \
--sign --referenceIdAttributeName ID \
--inFile "$metadataIn" \
--outFile "$metadataOut" \
--digest SHA-256 --signatureAlgorithm http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 \
--key "$certsDir/$keyName" $commandPass --certificate "$certsDir/$crtName"
echo -e "\n"