Git init
[external/xmlsec1.git] / tests / aleksey-xkms-01 / keys / create-keys.sh
1 #!/bin/sh
2 #
3 # This script along with "openssl.cnf" file from this folder creates 
4 # a chain of three certificates containing RSA 1024 keys:
5 #       cert1 (key1) - root CA certificate (self signed).
6 #       cert2 (key2) - second level CA certificate (signed with key1/cert1)
7 #       cert3 (key3) - signature/encryption certificate (signed with key2/cert2)
8 # All the private keys are encrypted with password "secret". 
9 #
10 export CA_TOP=./demoCA
11 export CA_PWD=secret
12
13 echo "Remove old file"
14 rm -rf "$CA_TOP" *.pem *.der *.p12 *.req
15
16 echo "Create CA folders structure"
17 mkdir "$CA_TOP"
18 mkdir "${CA_TOP}/certs"
19 mkdir "${CA_TOP}/crl"
20 mkdir "${CA_TOP}/newcerts"
21 mkdir "${CA_TOP}/private"
22 echo "01" > "$CA_TOP/serial"
23 touch "$CA_TOP/index.txt"
24
25 echo "Create root key and certificate"
26 export CERT_NAME="aleksey-xkms-01 root certificate"
27 openssl req -config ./openssl.cnf -new -x509 -keyout key1.pem -out cert1.pem -batch
28
29 echo "Generate RSA key and second level certificate"
30 export CERT_NAME="aleksey-xkms-01 second level certificate"
31 openssl genrsa -out key2.pem
32 openssl req -config ./openssl.cnf -batch -new -key key2.pem -out req2.pem
33 openssl ca  -config ./openssl.cnf -passin pass:$CA_PWD -batch -extensions v3_ca -cert cert1.pem -keyfile key1.pem -out cert2.pem -infiles req2.pem 
34         
35 echo "Generate another RSA key and third level certificate"
36 export CERT_NAME="aleksey-xkms-01 signature and encryption certificate"
37 openssl genrsa -out key3.pem
38 openssl req -config ./openssl.cnf -batch -new -key key3.pem -out req3.pem
39 openssl ca  -config ./openssl.cnf -passin pass:$CA_PWD -batch -cert cert2.pem -keyfile key2.pem -out cert3.pem -infiles req3.pem
40
41 echo "Convert all private keys to der, pkcs8/der and pkcs12 format"
42 openssl rsa -passin pass:$CA_PWD -passout pass:$CA_PWD -inform PEM -outform DER -in key1.pem -out key1.der
43 openssl rsa -passin pass:$CA_PWD -passout pass:$CA_PWD -inform PEM -outform DER -in key2.pem -out key2.der
44 openssl rsa -passin pass:$CA_PWD -passout pass:$CA_PWD -inform PEM -outform DER -in key3.pem -out key3.der
45
46 openssl pkcs8 -passin pass:$CA_PWD -passout pass:$CA_PWD -in key1.pem -inform pem -out key1-pk8.der -outform der -topk8
47 openssl pkcs8 -passin pass:$CA_PWD -passout pass:$CA_PWD -in key2.pem -inform pem -out key2-pk8.der -outform der -topk8
48 openssl pkcs8 -passin pass:$CA_PWD -passout pass:$CA_PWD -in key3.pem -inform pem -out key3-pk8.der -outform der -topk8
49             
50 openssl pkcs12 -passin pass:$CA_PWD -passout pass:$CA_PWD -export -in cert1.pem -inkey key1.pem -name key1 -out key1.p12
51 openssl pkcs12 -passin pass:$CA_PWD -passout pass:$CA_PWD -export -in cert2.pem -inkey key2.pem -name key2 -out key2.p12
52 openssl pkcs12 -passin pass:$CA_PWD -passout pass:$CA_PWD -export -in cert3.pem -inkey key3.pem -name key3 -out key3.p12
53         
54 echo "Convert all certificates to der format"
55 openssl x509 -outform DER -in cert1.pem -out cert1.der 
56 openssl x509 -outform DER -in cert2.pem -out cert2.der 
57 openssl x509 -outform DER -in cert3.pem -out cert3.der 
58
59 echo "View certificates"
60 openssl x509 -noout -text -in cert1.pem
61 openssl x509 -noout -text -in cert2.pem
62 openssl x509 -noout -text -in cert3.pem
63
64 echo "Test certificates"
65 openssl verify -CAfile cert1.pem cert2.pem
66 openssl verify -CAfile cert1.pem -untrusted cert2.pem cert3.pem
67     
68
69 echo "Cleanup"
70 rm -rf "$CA_TOP" *.req
71         
72         
73