]> WPIA git - gigi.git/blob - config/generateTruststoreNRE.sh
Merge changes I46ae11f8,I6d71e70e,Ie19e3229
[gigi.git] / config / generateTruststoreNRE.sh
1 #!/bin/bash
2 # this script imports the root certs into a Java key store
3 # additionally it can generate the certs for gigi, if none are provided and the CA-keys are available in the config folder for the Simple Signer
4 # This script is generally only intended for development purposes.
5
6 rm -f cacerts.jks
7
8 function import(){
9   name=$1
10   keytool -importcert -keystore ../config/cacerts.jks -file "$1.crt" -alias own -storepass "changeit" -alias "$(basename $name)" $2
11 }
12
13 function importP(){
14  keytool -importkeystore -srckeystore "$1" -noprompt -destkeystore keystore.pkcs12 -srcstoretype pkcs12 -deststoretype pkcs12 -deststorepass changeit -srcstorepass changeit
15 }
16
17 import ca/root -noprompt
18 import ca/assured
19 import ca/unassured
20 import ca/orga
21 import ca/orgaSign
22 import ca/codesign
23
24 for i in ca/*_*_*; do
25   import ${i%.crt}
26 done
27
28 # Generate Gigi certificates manually
29 cabasename=assured
30 caname=${cabasename}_$(date +%Y)_1
31 ca=../signer/ca/$caname/ca
32 if [[ -f "$ca.key" ]] && ! [[ -f keystore.pkcs12 ]]; then
33     # when the domain is provided externally as environment variable, use it and do not prompt for it.
34     [[ -z $DOMAIN ]] && read -rp "I need to generate gigi-certificates. I need your base domain: " DOMAIN
35     # Assuming we have access to the CA-keys we generate two certificates and present them to gigi
36     # One to be used for all 4 https domains and one as email certificate.
37
38     # Generate two keys and certs requests. The CN of the SSL-server cert doesn't really matter, as we use subject alt names anyways.
39     openssl req -newkey rsa:2048 -keyout www.key -out www.csr -nodes -subj "/CN=gigi server certificate"
40     openssl req -newkey rsa:2048 -keyout mail.key -out mail.csr -nodes -subj "/CN=gigi system"
41
42     # Sign the two requests with the keys in the config of the simple signer. Use serials 1000001 and 1000002 to probably not collide with the "simple signer"
43     openssl x509 -req -in www.csr -out www.crt -CA $ca.crt -CAkey $ca.key -set_serial 1000001 -extfile <(printf "[ext]\nsubjectAltName=DNS:www.$DOMAIN,DNS:secure.$DOMAIN,DNS:static.$DOMAIN,DNS:api.$DOMAIN\nbasicConstraints=CA:FALSE\nextendedKeyUsage=serverAuth\nkeyUsage=digitalSignature,keyEncipherment\n") -extensions ext
44     openssl x509 -req -in mail.csr -out mail.crt -CA $ca.crt -CAkey $ca.key -set_serial 1000002 -extfile <(printf "[ext]\nsubjectAltName=email:support@$DOMAIN\nbasicConstraints=CA:FALSE\nextendedKeyUsage=emailProtection\nkeyUsage=digitalSignature,keyEncipherment\n") -extensions ext
45
46     # Store the webserver cert in 4 different pkcs12-keystores to have different "key aliases" and import them all into the "keystore.pkcs12" using the "importP"-method
47     for t in www api secure static; do
48         # concatenate private key and certificate chain together
49         # and filter out comments from .crt files with "openssl x509"
50         # before feeding them into "openssl pkcs12"
51         cat www.key www.crt ca/$caname.crt ca/$cabasename.crt ca/root.crt |\
52             (openssl pkey; for i in {1..4}; do openssl x509; done) |\
53             openssl pkcs12 -export -out $t.pkcs12 -name "$t" -passout pass:changeit
54         importP "$t.pkcs12"
55     done
56     # and finally add the mail certificate
57     cat mail.key mail.crt ca/$caname.crt ca/$cabasename.crt ca/root.crt |\
58         (openssl pkey; for i in {1..4}; do openssl x509; done) |\
59         openssl pkcs12 -export -out mail.pkcs12 -name "mail" -passout pass:changeit
60     importP "mail.pkcs12"
61 fi
62 keytool -list -keystore ../config/cacerts.jks -storepass "changeit"