| OLD | NEW |
| 1 #!/bin/sh | 1 #!/bin/sh |
| 2 | 2 |
| 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 # This script generates two chains of test certificates: | 7 # XXX This script generates two chains of test certificates: |
| 8 # | 8 # |
| 9 # 1. A (end-entity) -> B -> C -> D (self-signed root) | 9 # 1. A (end-entity) -> B -> C -> D (self-signed root) |
| 10 # 2. A (end-entity) -> B -> C2 (self-signed root) | 10 # 2. A (end-entity) -> B -> C2 -> E (self-signed root) |
| 11 # | 11 # |
| 12 # in which A, B, C, and D have distinct keypairs. C2 is a self-signed root | 12 # C and C2 have the same subject and keypair. |
| 13 # certificate that uses the same keypair as C. | |
| 14 # | 13 # |
| 15 # We use these cert chains in | 14 # We use these cert chains in CertVerifyProcChromeOSTest |
| 16 # SSLClientSocketTest.VerifyReturnChainProperlyOrdered to ensure that | 15 # to ensure that multiple verification paths are properly handled. |
| 17 # SSLInfo objects see the certificate chain as validated rather than as | |
| 18 # served by the server. The server serves chain 1. The client has C2, NOT D, | |
| 19 # installed as a trusted root. Therefore, the chain will validate as chain | |
| 20 # 2, even though the server served chain 1. | |
| 21 | 16 |
| 17 set -x |
| 22 try () { | 18 try () { |
| 23 echo "$@" | 19 echo "$@" |
| 24 $@ || exit 1 | 20 $@ || exit 1 |
| 25 } | 21 } |
| 26 | 22 |
| 27 generate_key_command () { | |
| 28 case "$1" in | |
| 29 rsa) | |
| 30 echo genrsa | |
| 31 ;; | |
| 32 *) | |
| 33 exit 1 | |
| 34 esac | |
| 35 } | |
| 36 | |
| 37 try rm -rf out | 23 try rm -rf out |
| 38 try mkdir out | 24 try mkdir out |
| 39 | 25 |
| 40 echo Create the serial number files. | 26 echo Create the serial number files. |
| 41 serial=100 | 27 serial=1000 |
| 42 for i in B C C2 D | 28 for i in B C C2 D E |
| 43 do | 29 do |
| 44 try echo $serial > out/$i-serial | 30 echo $serial > out/$i-serial |
| 45 serial=$(expr $serial + 1) | 31 serial=$(expr $serial + 1) |
| 46 done | 32 done |
| 47 | 33 |
| 48 echo Generate the keys. | 34 echo Generate the keys. |
| 49 try openssl genrsa -out out/A.key 2048 | 35 try openssl genrsa -out out/A.key 2048 |
| 50 try openssl genrsa -out out/B.key 2048 | 36 try openssl genrsa -out out/B.key 2048 |
| 51 try openssl genrsa -out out/C.key 2048 | 37 try openssl genrsa -out out/C.key 2048 |
| 52 try openssl genrsa -out out/D.key 2048 | 38 try openssl genrsa -out out/D.key 2048 |
| 39 try openssl genrsa -out out/E.key 2048 |
| 53 | 40 |
| 54 echo Generate the D CSR. | 41 echo Generate the D CSR. |
| 55 CA_COMMON_NAME="D Root CA" \ | 42 CA_COMMON_NAME="D Root CA" \ |
| 56 CA_DIR=out \ | 43 CA_DIR=out \ |
| 57 CA_NAME=req_env_dn \ | 44 CA_NAME=req_env_dn \ |
| 58 KEY_SIZE=2048 \ | 45 KEY_SIZE=2048 \ |
| 59 ALGO=rsa \ | 46 ALGO=rsa \ |
| 60 CERT_TYPE=root \ | 47 CERT_TYPE=root \ |
| 61 TYPE=D CERTIFICATE=D \ | 48 TYPE=D CERTIFICATE=D \ |
| 62 try openssl req \ | 49 try openssl req \ |
| 63 -new \ | 50 -new \ |
| 64 -key out/D.key \ | 51 -key out/D.key \ |
| 65 -out out/D.csr \ | 52 -out out/D.csr \ |
| 66 -config redundant-ca.cnf | 53 -config redundant-ca.cnf |
| 67 | 54 |
| 68 echo D signs itself. | 55 echo D signs itself. |
| 69 CA_COMMON_NAME="D Root CA" \ | 56 CA_COMMON_NAME="D Root CA" \ |
| 70 CA_DIR=out \ | 57 CA_DIR=out \ |
| 71 CA_NAME=req_env_dn \ | 58 CA_NAME=req_env_dn \ |
| 72 try openssl x509 \ | 59 try openssl x509 \ |
| 73 -req -days 3650 \ | 60 -req -days 3650 \ |
| 74 -in out/D.csr \ | 61 -in out/D.csr \ |
| 75 -extensions ca_cert \ | 62 -extensions ca_cert \ |
| 76 -signkey out/D.key \ | 63 -signkey out/D.key \ |
| 77 -out out/D.pem | 64 -out out/D.pem |
| 78 | 65 |
| 79 echo Generate the C2 root CSR. | 66 echo Generate the E CSR. |
| 67 CA_COMMON_NAME="E Root CA" \ |
| 68 CA_DIR=out \ |
| 69 CA_NAME=req_env_dn \ |
| 70 KEY_SIZE=2048 \ |
| 71 ALGO=rsa \ |
| 72 CERT_TYPE=root \ |
| 73 TYPE=E CERTIFICATE=E \ |
| 74 try openssl req \ |
| 75 -new \ |
| 76 -key out/E.key \ |
| 77 -out out/E.csr \ |
| 78 -config redundant-ca.cnf |
| 79 |
| 80 echo E signs itself. |
| 81 CA_COMMON_NAME="E Root CA" \ |
| 82 CA_DIR=out \ |
| 83 CA_NAME=req_env_dn \ |
| 84 try openssl x509 \ |
| 85 -req -days 3650 \ |
| 86 -in out/E.csr \ |
| 87 -extensions ca_cert \ |
| 88 -signkey out/E.key \ |
| 89 -out out/E.pem |
| 90 |
| 91 echo Generate the C2 intermediary CSR. |
| 80 CA_COMMON_NAME="C CA" \ | 92 CA_COMMON_NAME="C CA" \ |
| 81 CA_DIR=out \ | 93 CA_DIR=out \ |
| 82 CA_NAME=req_env_dn \ | 94 CA_NAME=req_env_dn \ |
| 83 KEY_SIZE=2048 \ | 95 KEY_SIZE=2048 \ |
| 84 ALGO=rsa \ | 96 ALGO=rsa \ |
| 85 CERT_TYPE=root \ | 97 CERT_TYPE=root \ |
| 86 TYPE=C2 CERTIFICATE=C2 \ | 98 TYPE=C2 CERTIFICATE=C2 \ |
| 87 try openssl req \ | 99 try openssl req \ |
| 88 -new \ | 100 -new \ |
| 89 -key out/C.key \ | 101 -key out/C.key \ |
| 90 -out out/C2.csr \ | 102 -out out/C2.csr \ |
| 91 -config redundant-ca.cnf | 103 -config redundant-ca.cnf |
| 92 | 104 |
| 93 echo C2 signs itself. | |
| 94 CA_COMMON_NAME="C CA" \ | |
| 95 CA_DIR=out \ | |
| 96 CA_NAME=req_env_dn \ | |
| 97 try openssl x509 \ | |
| 98 -req -days 3650 \ | |
| 99 -in out/C2.csr \ | |
| 100 -extensions ca_cert \ | |
| 101 -signkey out/C.key \ | |
| 102 -out out/C2.pem | |
| 103 | |
| 104 echo Generate the B and C intermediaries\' CSRs. | 105 echo Generate the B and C intermediaries\' CSRs. |
| 105 for i in B C | 106 for i in B C |
| 106 do | 107 do |
| 107 name="$i Intermediate CA" | |
| 108 CA_COMMON_NAME="$i CA" \ | 108 CA_COMMON_NAME="$i CA" \ |
| 109 CA_DIR=out \ | 109 CA_DIR=out \ |
| 110 CA_NAME=req_env_dn \ | 110 CA_NAME=req_env_dn \ |
| 111 KEY_SIZE=2048 \ | 111 KEY_SIZE=2048 \ |
| 112 ALGO=rsa \ | 112 ALGO=rsa \ |
| 113 CERT_TYPE=root \ | 113 CERT_TYPE=root \ |
| 114 TYPE=$i CERTIFICATE=$i \ | 114 TYPE=$i CERTIFICATE=$i \ |
| 115 try openssl req \ | 115 try openssl req \ |
| 116 -new \ | 116 -new \ |
| 117 -key out/$i.key \ | 117 -key out/$i.key \ |
| (...skipping 11 matching lines...) Expand all Loading... |
| 129 ALGO=rsa \ | 129 ALGO=rsa \ |
| 130 CERT_TYPE=root \ | 130 CERT_TYPE=root \ |
| 131 TYPE=D CERTIFICATE=D \ | 131 TYPE=D CERTIFICATE=D \ |
| 132 try openssl ca \ | 132 try openssl ca \ |
| 133 -batch \ | 133 -batch \ |
| 134 -extensions ca_cert \ | 134 -extensions ca_cert \ |
| 135 -in out/C.csr \ | 135 -in out/C.csr \ |
| 136 -out out/C.pem \ | 136 -out out/C.pem \ |
| 137 -config redundant-ca.cnf | 137 -config redundant-ca.cnf |
| 138 | 138 |
| 139 echo E signs the C2 intermediate. |
| 140 # Make sure the signer's DB file exists. |
| 141 touch out/E-index.txt |
| 142 CA_COMMON_NAME="E Root CA" \ |
| 143 CA_DIR=out \ |
| 144 CA_NAME=req_env_dn \ |
| 145 KEY_SIZE=2048 \ |
| 146 ALGO=rsa \ |
| 147 CERT_TYPE=root \ |
| 148 TYPE=E CERTIFICATE=E \ |
| 149 try openssl ca \ |
| 150 -batch \ |
| 151 -extensions ca_cert \ |
| 152 -in out/C2.csr \ |
| 153 -out out/C2.pem \ |
| 154 -config redundant-ca.cnf |
| 155 |
| 139 echo C signs the B intermediate. | 156 echo C signs the B intermediate. |
| 140 touch out/C-index.txt | 157 touch out/C-index.txt |
| 141 CA_COMMON_NAME="C CA" \ | 158 CA_COMMON_NAME="C CA" \ |
| 142 CA_DIR=out \ | 159 CA_DIR=out \ |
| 143 CA_NAME=req_env_dn \ | 160 CA_NAME=req_env_dn \ |
| 144 KEY_SIZE=2048 \ | 161 KEY_SIZE=2048 \ |
| 145 ALGO=rsa \ | 162 ALGO=rsa \ |
| 146 CERT_TYPE=root \ | 163 CERT_TYPE=root \ |
| 147 TYPE=C CERTIFICATE=C \ | 164 TYPE=C CERTIFICATE=C \ |
| 148 try openssl ca \ | 165 try openssl ca \ |
| (...skipping 19 matching lines...) Expand all Loading... |
| 168 ALGO=$signer_algo \ | 185 ALGO=$signer_algo \ |
| 169 CERT_TYPE=intermediate \ | 186 CERT_TYPE=intermediate \ |
| 170 TYPE=B CERTIFICATE=B \ | 187 TYPE=B CERTIFICATE=B \ |
| 171 try openssl ca \ | 188 try openssl ca \ |
| 172 -batch \ | 189 -batch \ |
| 173 -extensions user_cert \ | 190 -extensions user_cert \ |
| 174 -in out/A.csr \ | 191 -in out/A.csr \ |
| 175 -out out/A.pem \ | 192 -out out/A.pem \ |
| 176 -config redundant-ca.cnf | 193 -config redundant-ca.cnf |
| 177 | 194 |
| 178 echo Create redundant-server-chain.pem | 195 echo Create foo-chain1.pem |
| 179 cat out/A.key out/A.pem out/B.pem out/C.pem out/D.pem \ | 196 cat out/A.key out/A.pem out/B.pem out/C.pem out/D.pem \ |
| 180 > redundant-server-chain.pem | 197 > foo-chain1.pem |
| 181 | 198 |
| 182 echo Create redundant-validated-chain.pem | 199 echo Create foo-chain2.pem |
| 183 cat out/A.key out/A.pem out/B.pem out/C2.pem > redundant-validated-chain.pem | 200 cat out/A.key out/A.pem out/B.pem out/C2.pem out/E.pem \ |
| 201 > foo-chain2.pem |
| 184 | 202 |
| 185 echo Create redundant-validated-chain-root.pem | |
| 186 cp out/C2.pem redundant-validated-chain-root.pem | |
| 187 | |
| OLD | NEW |