| Index: net/data/ssl/scripts/generate-duplicate-cn-certs.sh
|
| diff --git a/net/data/ssl/scripts/generate-duplicate-cn-certs.sh b/net/data/ssl/scripts/generate-duplicate-cn-certs.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..8e48454342f35a74f154fbde21fd982654750b71
|
| --- /dev/null
|
| +++ b/net/data/ssl/scripts/generate-duplicate-cn-certs.sh
|
| @@ -0,0 +1,132 @@
|
| +#!/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
|
| +}
|
| +
|
| +generate_key_command () {
|
| + case "$1" in
|
| + rsa)
|
| + echo genrsa
|
| + ;;
|
| + *)
|
| + exit 1
|
| + esac
|
| +}
|
| +
|
| +try rm -rf out
|
| +try mkdir out
|
| +
|
| +echo Create the serial number and index files.
|
| +try echo 1 > 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" \
|
| + CA_DIR=out \
|
| + CA_NAME=req_env_dn \
|
| + KEY_SIZE=2048 \
|
| + ALGO=rsa \
|
| + CERT_TYPE=root \
|
| + TYPE=B 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" \
|
| + CA_DIR=out \
|
| + CA_NAME=req_env_dn \
|
| + 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" \
|
| + CA_DIR=out \
|
| + CA_NAME=req_env_dn \
|
| + KEY_SIZE=2048 \
|
| + ALGO=sha1 \
|
| + CERT_TYPE=intermediate \
|
| + TYPE=B 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" \
|
| + CA_DIR=out \
|
| + CA_NAME=req_env_dn \
|
| + KEY_SIZE=2048 \
|
| + ALGO=sha1 \
|
| + CERT_TYPE=intermediate \
|
| + TYPE=B 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
|
| +
|
| +cp out/A1.pem ../certificates/duplicate_cn_1.pem
|
| +cp out/A2.pem ../certificates/duplicate_cn_2.pem
|
|
|