Imported Upstream version 2.74.0
[platform/upstream/glib-networking.git] / tls / tests / files / create-files.sh
1 #!/bin/bash
2
3 set -e
4
5 msg() {
6   echo
7   echo "* $1 ..."
8 }
9
10 cd `dirname $0`
11
12 echo
13 echo "This script regenerates all private keys and certificates"
14 echo "needed to run glib-networking tests. Please note this script"
15 echo "depends on datefudge, openssl, and python3's cryptography module."
16 echo
17
18 read -p "Press [Enter] key to continue..."
19
20 #######################################################################
21 ### Obsolete/Untrusted Root CA
22 #######################################################################
23
24 echo "00" > serial
25
26 msg "Creating CA private key for obsolete/untrusted CA"
27 openssl genrsa -out old-ca-key.pem 2048
28
29 msg "Creating CA certificate for obsolete/untrusted CA"
30 openssl req -x509 -new -config ssl/old-ca.conf -days 10950 -key old-ca-key.pem -out old-ca.pem
31
32 #######################################################################
33 ### New Root CA
34 #######################################################################
35
36 msg "Creating CA private key"
37 openssl genrsa -out ca-key.pem 2048
38
39 msg "Creating CA certificate"
40 openssl req -x509 -new -config ssl/ca.conf -days 10950 -key ca-key.pem -out ca.pem
41
42 #######################################################################
43 ### New Root CA with OCSP MustStaple
44 #######################################################################
45
46 msg "Creating CA (OCSP) certificate"
47 openssl req -x509 -new -config ssl/ca.conf -addext tlsfeature=status_request -days 10950 -key ca-key.pem -out ca-ocsp.pem
48
49 #######################################################################
50 ### New Root CA, issued by Obsolete/Untrusted Root CA
51 #######################################################################
52
53 msg "Creating CA certificate request"
54 openssl req -config ssl/ca.conf -key ca-key.pem -new -out root-ca-csr.pem
55
56 msg "Creating alternative certificate with same keys as CA"
57 openssl x509 -req -in root-ca-csr.pem -days 10950 -CA old-ca.pem -CAkey old-ca-key.pem -CAserial serial -extfile ssl/ca.conf -extensions v3_req_ext -out ca-alternative.pem
58
59 #######################################################################
60 ### Server
61 #######################################################################
62
63 msg "Creating server private key"
64 openssl genrsa -out server-key.pem 2048
65
66 msg "Creating server certificate request"
67 openssl req -config ssl/server.conf -key server-key.pem -new -out server-csr.pem
68
69 msg "Creating server certificate"
70 openssl x509 -req -in server-csr.pem -days 9125 -CA ca.pem -CAkey ca-key.pem -CAserial serial -extfile ssl/server.conf -extensions v3_req_ext -out server.pem
71
72 msg "Concatenating server certificate and private key into a single file"
73 cat server.pem > server-and-key.pem
74 cat server-key.pem >> server-and-key.pem
75
76 msg "Updating digest of the new certificate in connections.c"
77 DIGEST=$( openssl x509 -outform der -in server.pem | openssl sha256 -binary | base64 | sed 's/\//\\\//g' )
78 sed -i "/define SERVER_CERT_DIGEST_B64/s/\"\([^\"]\+\)\"/\"$DIGEST\"/" ../connection.c
79
80 msg "Converting server certificate from PEM to DER"
81 openssl x509 -in server.pem -outform DER -out server.der
82
83 msg "Converting server private key from PEM to DER"
84 openssl rsa -in server-key.pem -outform DER -out server-key.der
85
86 msg "Converting server private key to PKCS #8"
87 openssl pkcs8 -topk8 -in server-key.pem -outform PEM -nocrypt -out server-key-pkcs8.pem
88 openssl pkcs8 -topk8 -in server-key.pem -outform DER -nocrypt -out server-key-pkcs8.der
89
90 #######################################################################
91 ### Server (OCSP required by CA)
92 #######################################################################
93
94 msg "Creating server (OCSP required by CA) certificate"
95 openssl x509 -req -in server-csr.pem -days 9125 -CA ca-ocsp.pem -CAkey ca-key.pem -CAserial serial -extfile ssl/server.conf -extensions v3_req_ext -out server-ocsp-required-by-ca.pem
96
97 msg "Concatenating server (OCSP required by CA) certificate and private key into a single file"
98 cat server-ocsp-required-by-ca.pem > server-ocsp-required-by-ca-and-key.pem
99 cat server-key.pem >> server-ocsp-required-by-ca-and-key.pem
100
101 #######################################################################
102 ### Server (OCSP required by server)
103 #######################################################################
104
105 msg "Creating server (OCSP required by server) certificate"
106 openssl x509 -req -in server-csr.pem -days 9125 -CA ca.pem -CAkey ca-key.pem -CAserial serial -extfile ssl/server-muststaple.conf -extensions v3_req_ext -out server-ocsp-required-by-server.pem
107
108 msg "Concatenating server (OCSP required by server) certificate and private key into a single file"
109 cat server-ocsp-required-by-server.pem > server-ocsp-required-by-server-and-key.pem
110 cat server-key.pem >> server-ocsp-required-by-server-and-key.pem
111
112 #######################################################################
113 ### Server (self-signed)
114 #######################################################################
115
116 msg "Creating server self-signed certificate"
117 openssl x509 -req -days 9125 -in server-csr.pem -signkey server-key.pem -out server-self.pem
118
119 #######################################################################
120 ### Client
121 #######################################################################
122
123 msg "Creating client private key"
124 openssl genrsa -out client-key.pem 2048
125
126 msg "Creating client certificate request"
127 openssl req -config ssl/client.conf -key client-key.pem -new -out client-csr.pem
128
129 msg "Creating client certificate"
130 openssl x509 -req -in client-csr.pem -days 9125 -CA ca.pem -CAkey ca-key.pem -CAserial serial -out client.pem
131
132 msg "Concatenating client certificate and private key into a single file"
133 cat client.pem > client-and-key.pem
134 cat client-key.pem >> client-and-key.pem
135
136 msg "Concatenating the full client chain into a single file"
137 cat ca.pem > client-and-key-fullchain.pem
138 cat client-and-key.pem >> client-and-key-fullchain.pem
139
140 # It is not possible to specify the start and end date using the "x509" tool.
141 # It would be better to use the "ca" tool. Sorry!
142 msg "Creating client certificate (past)"
143 datefudge "17 JUL 2000 18:00:00" openssl x509 -req -in client-csr.pem -days 365 -startdate -enddate -CA ca.pem -CAkey ca-key.pem -CAserial serial -out client-past.pem
144 touch client-past.pem
145
146 msg "Creating client certificate (future)"
147 datefudge "17 JUL 2060 18:00:00" openssl x509 -req -in client-csr.pem -days 365 -startdate -enddate -CA ca.pem -CAkey ca-key.pem -CAserial serial -out client-future.pem
148 touch client-future.pem
149
150 msg "Creating second client key pair"
151 openssl genrsa -out client2-key.pem 2048
152 openssl req -config ssl/client.conf -key client2-key.pem -new -out client2-csr.pem
153 openssl x509 -req -in client2-csr.pem -days 9125 -CA ca.pem -CAkey ca-key.pem -CAserial serial -out client2.pem
154
155 msg "Concatenating second client certificate and private key into a single file"
156 cat client2.pem client2-key.pem > client2-and-key.pem
157
158 #######################################################################
159 ### Concatenate all non-CA certificates
160 #######################################################################
161
162 msg "Concatenating all non-CA certificates into a single file"
163 echo "client.pem:" > non-ca.pem
164 cat client.pem >> non-ca.pem
165 echo >> non-ca.pem
166 echo "client-future.pem:" >> non-ca.pem
167 cat client-future.pem >> non-ca.pem
168 echo >> non-ca.pem
169 echo "client-past.pem:" >> non-ca.pem
170 cat client-past.pem >> non-ca.pem
171 echo >> non-ca.pem
172 echo "server.pem:" >> non-ca.pem
173 cat server.pem >> non-ca.pem
174 echo >> non-ca.pem
175 echo "server-self.pem:" >> non-ca.pem
176 cat server-self.pem >> non-ca.pem
177
178 #######################################################################
179 ### Intermediate CA
180 #######################################################################
181
182 echo "00" > intermediate-serial
183
184 msg "Creating intermediate CA private key"
185 openssl genrsa -out intermediate-ca-key.pem 2048
186
187 msg "Creating intermediate CA certificate request"
188 openssl req -config ssl/intermediate-ca.conf -key intermediate-ca-key.pem -new -out intermediate-ca-csr.pem
189
190 msg "Creating intermediate CA certificate"
191 openssl x509 -req -in intermediate-ca-csr.pem -days 9125 -CA ca.pem -CAkey ca-key.pem -CAserial serial -extfile ssl/intermediate-ca.conf -extensions v3_req_ext -out intermediate-ca.pem
192
193 #######################################################################
194 ### Server (signed by Intermediate CA)
195 #######################################################################
196
197 msg "Creating server (intermediate CA) private key"
198 openssl genrsa -out server-intermediate-key.pem 2048
199
200 msg "Creating server (intermediate CA) certificate request"
201 openssl req -config ssl/server-intermediate.conf -key server-intermediate-key.pem -new -out server-intermediate-csr.pem
202
203 msg "Creating server (intermediate CA) certificate"
204 openssl x509 -req -in server-intermediate-csr.pem -days 9125 -CA intermediate-ca.pem -CAkey intermediate-ca-key.pem -CAserial intermediate-serial -extfile ssl/server-intermediate.conf -extensions v3_req_ext -out server-intermediate.pem
205
206 msg "Concatenating server (intermediate CA) chain into a file"
207 cat server-intermediate.pem > chain.pem
208 cat intermediate-ca.pem >> chain.pem
209 cat ca.pem >> chain.pem
210
211 #######################################################################
212 ### Updating CA Root files
213 #######################################################################
214
215 msg "Updating CA Root files"
216 ./update-chain-with-new-root.py ca-roots.pem ca.pem
217 ./update-chain-with-new-root.py ca-roots-bad.pem ca.pem
218
219 #######################################################################
220 ### Update test expectations
221 #######################################################################
222
223 msg "Updating test expectations"
224 ./update-test-database.py ca.pem ../file-database.h
225 ./update-certificate-test.py server.pem ../certificate.h
226
227 #######################################################################
228 ### Generate PKCS #12 format copies for testing
229 #######################################################################
230
231 msg "Generating PKCS #12 files"
232 # Not encrypted p12 file
233 openssl pkcs12 -in client-and-key.pem -export -keypbe NONE -certpbe NONE -nomaciter -out client-and-key.p12 -passout 'pass:' -name "No password"
234 # Encrypted key only
235 openssl pkcs12 -in client-and-key.pem -export -certpbe NONE -nomaciter -out client-and-key-password.p12 -passout 'pass:1234' -name "With Password"
236 # Encrypted p12 file
237 openssl pkcs12 -in client-and-key.pem -export -out client-and-key-password-enckey.p12 -passout 'pass:1234' -name "With Password and encrypted privkey"
238
239 #######################################################################
240 ### Cleanup
241 #######################################################################
242
243 # We don't need the serial files anymore
244 rm -f serial
245 rm -f intermediate-serial