#!/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