|  | #!/bin/sh | 
|  |  | 
|  | # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | # This script generates two chains of test certificates: | 
|  | #    1. A1 (end-entity) -> B (self-signed root) | 
|  | #    2. A2 (end-entity) -> B (self-signed root) | 
|  | # | 
|  | # In which A1 and A2 share the same key, the same subject common name, but have | 
|  | # distinct O values in their subjects. | 
|  | # | 
|  | # This is used to test that NSS can properly generate unique certificate | 
|  | # nicknames for both certificates. | 
|  |  | 
|  | try () { | 
|  | echo "$@" | 
|  | "$@" || exit 1 | 
|  | } | 
|  |  | 
|  | try rm -rf out | 
|  | try mkdir out | 
|  |  | 
|  | echo Create the serial number and index files. | 
|  | try /bin/sh -c "echo 01 > out/B-serial" | 
|  | try touch out/B-index.txt | 
|  |  | 
|  | echo Generate the keys. | 
|  | try openssl genrsa -out out/A.key 2048 | 
|  | try openssl genrsa -out out/B.key 2048 | 
|  |  | 
|  | echo Generate the B CSR. | 
|  | CA_COMMON_NAME="B Root CA" \ | 
|  | CERTIFICATE=B \ | 
|  | try openssl req \ | 
|  | -new \ | 
|  | -key out/B.key \ | 
|  | -out out/B.csr \ | 
|  | -config redundant-ca.cnf | 
|  |  | 
|  | echo B signs itself. | 
|  | CA_COMMON_NAME="B Root CA" \ | 
|  | try openssl x509 \ | 
|  | -req -days 3650 \ | 
|  | -in out/B.csr \ | 
|  | -extfile redundant-ca.cnf \ | 
|  | -extensions ca_cert \ | 
|  | -signkey out/B.key \ | 
|  | -out out/B.pem | 
|  |  | 
|  | echo Generate the A1 end-entity CSR. | 
|  | SUBJECT_NAME=req_duplicate_cn_1 \ | 
|  | try openssl req \ | 
|  | -new \ | 
|  | -key out/A.key \ | 
|  | -out out/A1.csr \ | 
|  | -config ee.cnf | 
|  |  | 
|  | echo Generate the A2 end-entity CSR | 
|  | SUBJECT_NAME=req_duplicate_cn_2 \ | 
|  | try openssl req \ | 
|  | -new \ | 
|  | -key out/A.key \ | 
|  | -out out/A2.csr \ | 
|  | -config ee.cnf | 
|  |  | 
|  |  | 
|  | echo B signs A1. | 
|  | CA_COMMON_NAME="B CA" \ | 
|  | CERTIFICATE=B \ | 
|  | try openssl ca \ | 
|  | -batch \ | 
|  | -extensions user_cert \ | 
|  | -in out/A1.csr \ | 
|  | -out out/A1.pem \ | 
|  | -config redundant-ca.cnf | 
|  |  | 
|  | echo B signs A2. | 
|  | CA_COMMON_NAME="B CA" \ | 
|  | CERTIFICATE=B \ | 
|  | try openssl ca \ | 
|  | -batch \ | 
|  | -extensions user_cert \ | 
|  | -in out/A2.csr \ | 
|  | -out out/A2.pem \ | 
|  | -config redundant-ca.cnf | 
|  |  | 
|  | echo Exporting the certificates to PKCS#12 | 
|  | try openssl pkcs12 \ | 
|  | -export \ | 
|  | -inkey out/A.key \ | 
|  | -in out/A1.pem \ | 
|  | -out ../certificates/duplicate_cn_1.p12 \ | 
|  | -passout pass:chrome | 
|  |  | 
|  | try openssl pkcs12 \ | 
|  | -export \ | 
|  | -inkey out/A.key \ | 
|  | -in out/A2.pem \ | 
|  | -out ../certificates/duplicate_cn_2.p12 \ | 
|  | -passout pass:chrome | 
|  |  | 
|  | try cp out/A1.pem ../certificates/duplicate_cn_1.pem | 
|  | try cp out/A2.pem ../certificates/duplicate_cn_2.pem |