first commit
[threegates.git] / bin / certs_extractor.sh
1 #/bin/bash
2 # set -x
3
4 if [ "$THREEGATES_CA_BASE" != "" ]; then
5     ca_dir="${THREEGATES_CA_BASE}"
6 else
7     ca_dir="ca"
8 fi
9
10 if [ -d "$ca_dir" ]; then
11     rm -rf "$ca_dir"
12 fi
13 mkdir -p "$ca_dir"
14
15 IFS='
16 '
17 ct=1
18 for i in $(cat raw/IT_TSL_CNS.xml raw/IT_TSL_signed.xml | tr -d '\n' | tr -d '\r' | sed 's@\(</\?tsl:X509Certificate>\)@\n\1@g' | grep '^<tsl:X509Certificate>' | sed 's/<tsl:X509Certificate>//g' | grep -v '^$' | sort | uniq ); do
19     # oname="$(printf "%06d" $ct).pem"
20     oname=tmp.pem
21     ( echo "-----BEGIN CERTIFICATE-----"
22     echo "$i" | sed 's/\(.\{60\}\)/\1\n/g' 
23     echo "-----END CERTIFICATE-----" ) | grep -v '^$'  > ${ca_dir}/$oname
24
25     hname="$(cat ${ca_dir}/$oname | md5sum | cut -d ' ' -f 1).pem"
26     mv "${ca_dir}/$oname" "${ca_dir}/$hname"
27     
28     hash="$(cat "${ca_dir}/$hname" | openssl x509 -inform PEM  -hash -noout)"
29     link="$(cat "${ca_dir}/$hname" | openssl x509 -inform PEM  -issuer -noout | sed 's/^issuer= //g;s@/@~@g')"
30     
31     cd ${ca_dir}
32     for n in $(seq 0 100); do
33         if [ -f ${hash}.$n ]; then
34             continue
35         fi
36         ln -s "$hname" ${hash}.$n
37         break
38     done
39
40     if [ $n -eq 100 ]; then
41         echo "n exceeds maximum value (hash)."
42         exit 1
43     fi
44
45     for n in $(seq 1 100); do
46         if [ $n -eq 1 ]; then
47             lname="${link}.pem"
48         else
49             lname="${link}_($n).pem"
50         fi
51         
52         if [ -f "$lname" ]; then
53             continue
54         fi
55         ln -s "$hname" "$lname"
56         break
57     done
58
59     if [ $n -eq 100 ]; then
60         echo "n exceeds maximum value (link)."
61         exit 2
62     fi
63
64     cd - >/dev/null 2>&1
65
66     ct=$((ct + 1))
67 done
68
69 exit 0