]> WPIA git - gigi.git/blob - keys/generateKeys.sh
upd: move logout button to toplevel
[gigi.git] / keys / generateKeys.sh
1 #!/bin/sh
2 # this script generates a set of sample keys
3 DOMAIN="cacert.local"
4 KEYSIZE=4096
5 PRIVATEPW="changeit"
6
7 [ -f config ] && . ./config
8
9
10 rm -Rf *.csr *.crt *.key *.pkcs12 *.ca *.crl
11
12
13 ####### create various extensions files for the various certificate types ######
14 cat <<TESTCA > test_ca.cnf
15 subjectKeyIdentifier = hash
16 #extendedKeyUsage = critical
17 basicConstraints = CA:true
18 keyUsage = digitalSignature, nonRepudiation, keyCertSign, cRLSign
19 TESTCA
20
21 cat <<TESTCA > test_subca.cnf
22 subjectKeyIdentifier = hash
23 #extendedKeyUsage = critical,
24 basicConstraints = CA:true
25 keyUsage = digitalSignature, nonRepudiation, keyCertSign, cRLSign
26 TESTCA
27
28 cat <<TESTCA > test_req.cnf
29 basicConstraints = critical,CA:false
30 keyUsage = keyEncipherment, digitalSignature
31 extendedKeyUsage=serverAuth
32 subjectKeyIdentifier = hash
33 authorityKeyIdentifier = keyid:always,issuer:always
34 #crlDistributionPoints=URI:http://www.my.host/ca.crl
35 #authorityInfoAccess = OCSP;URI:http://ocsp.my.host/
36 TESTCA
37
38 cat <<TESTCA > test_reqClient.cnf
39 basicConstraints = critical,CA:false
40 keyUsage = keyEncipherment, digitalSignature
41 extendedKeyUsage=clientAuth
42 subjectKeyIdentifier = hash
43 authorityKeyIdentifier = keyid:always,issuer:always
44 #crlDistributionPoints=URI:http://www.my.host/ca.crl
45 #authorityInfoAccess = OCSP;URI:http://ocsp.my.host/
46 TESTCA
47
48 cat <<TESTCA > test_reqMail.cnf
49 basicConstraints = critical,CA:false
50 keyUsage = keyEncipherment, digitalSignature
51 extendedKeyUsage=emailProtection
52 subjectKeyIdentifier = hash
53 authorityKeyIdentifier = keyid:always,issuer:always
54 #crlDistributionPoints=URI:http://www.my.host/ca.crl
55 #authorityInfoAccess = OCSP;URI:http://ocsp.my.host/
56 TESTCA
57
58
59 genca(){ #subj, internalName
60
61     openssl genrsa -out $2.key ${KEYSIZE}
62     openssl req -new -key $2.key -out $2.csr -subj "$1/O=Test Environment CA Ltd./OU=Test Environment CAs"
63     
64     mkdir $2.ca
65     mkdir $2.ca/newcerts
66     echo 01 > $2.ca/serial
67     touch $2.ca/db
68     echo unique_subject = no >$2.ca/db.attr
69
70 }
71
72 caSign(){ # key,ca,config
73     cd $2.ca
74     openssl ca -cert ../$2.crt -keyfile ../$2.key -in ../$1.csr -out ../$1.crt -days 365 -batch -config ../selfsign.config -extfile ../$3
75     cd ..
76 }
77
78 rootSign(){ # key
79     caSign $1 root test_subca.cnf
80 }
81
82 genserver(){ #key, subject, config
83     openssl genrsa -out $1.key ${KEYSIZE}
84     openssl req -new -key $1.key -out $1.csr -subj "$2" -config selfsign.config
85     caSign $1 env "$3"
86     
87     openssl pkcs12 -inkey $1.key -in $1.crt -CAfile env.chain.crt -chain -name $1 -export -passout pass:changeit -out $1.pkcs12
88     
89     keytool -importkeystore -noprompt -srckeystore $1.pkcs12 -destkeystore ../config/keystore.pkcs12 -srcstoretype pkcs12 -deststoretype pkcs12 -srcstorepass "changeit" -deststorepass "$PRIVATEPW"
90 }
91
92
93 # Generate the super Root CA
94 genca "/CN=Cacert-gigi testCA" root
95 openssl x509 -req -days 365 -in root.csr -signkey root.key -out root.crt -extfile test_ca.cnf
96
97 # generate the various sub-CAs
98 genca "/CN=Environment" env
99 rootSign env
100 genca "/CN=Unassured" unassured
101 rootSign unassured
102 genca "/CN=Assured" assured
103 rootSign assured
104 genca "/CN=Codesigning" codesign
105 rootSign codesign
106 genca "/CN=Timestamping" timestamp
107 rootSign timestamp
108 genca "/CN=Orga" orga
109 rootSign orga
110 genca "/CN=Orga sign" orgaSign
111 rootSign orgaSign
112
113
114 cat env.crt root.crt > env.chain.crt
115
116 # generate orga-keys specific to gigi.
117 # first the server keys
118 genserver www "/CN=www.${DOMAIN}" test_req.cnf
119 genserver secure "/CN=secure.${DOMAIN}" test_req.cnf
120 genserver static "/CN=static.${DOMAIN}" test_req.cnf
121 genserver api "/CN=api.${DOMAIN}" test_req.cnf
122
123 genserver signer_client "/CN=CAcert signer handler 1" test_reqClient.cnf
124 genserver signer_server "/CN=CAcert signer 1" test_req.cnf
125
126 # then the email signing key
127 genserver mail "/emailAddress=support@${DOMAIN}" test_reqMail.cnf
128
129 keytool -list -keystore ../config/keystore.pkcs12 -storetype pkcs12 -storepass "$PRIVATEPW"
130
131 rm test_ca.cnf test_subca.cnf test_req.cnf test_reqMail.cnf test_reqClient.cnf
132 rm env.chain.crt
133
134 cat root.crt env.crt > ca.crt
135 tar cf signer_bundle.tar root.crt env.crt signer_client.crt signer_client.key signer_server.crt signer_server.key ca.crt
136 rm ca.crt