| #!/bin/sh | |
| # Copyright (c) 2011 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 a set of test (end-entity, intermediate, root) | |
| # certificates with (weak, strong), (RSA, DSA, ECDSA) key pairs. | |
| key_types="768-rsa 1024-rsa 2048-rsa prime256v1-ecdsa" | |
| try () { | |
| echo "$@" | |
| $@ || exit 1 | |
| } | |
| generate_key_command () { | |
| case "$1" in | |
| dsa) | |
| echo "dsaparam -genkey" | |
| ;; | |
| ecdsa) | |
| echo "ecparam -genkey" | |
| ;; | |
| rsa) | |
| echo genrsa | |
| ;; | |
| *) | |
| exit 1 | |
| esac | |
| } | |
| try rm -rf out | |
| try mkdir out | |
| # Create the serial number files. | |
| try echo 1 > out/2048-rsa-root-serial | |
| for key_type in $key_types | |
| do | |
| try echo 1 > out/$key_type-intermediate-serial | |
| done | |
| # Generate one root CA certificate. | |
| try openssl genrsa -out out/2048-rsa-root.key 2048 | |
| CA_COMMON_NAME="2048 RSA Test Root CA" \ | |
| CA_DIR=out \ | |
| CA_NAME=req_env_dn \ | |
| KEY_SIZE=2048 \ | |
| ALGO=rsa \ | |
| CERT_TYPE=root \ | |
| try openssl req \ | |
| -new \ | |
| -key out/2048-rsa-root.key \ | |
| -extensions ca_cert \ | |
| -out out/2048-rsa-root.csr \ | |
| -config ca.cnf | |
| CA_COMMON_NAME="2048 RSA Test Root CA" \ | |
| CA_DIR=out \ | |
| CA_NAME=req_env_dn \ | |
| try openssl x509 \ | |
| -req -days 3650 \ | |
| -in out/2048-rsa-root.csr \ | |
| -extensions ca_cert \ | |
| -signkey out/2048-rsa-root.key \ | |
| -out out/2048-rsa-root.pem | |
| # Generate private keys of all types and strengths for intermediate CAs and | |
| # end-entities. | |
| for key_type in $key_types | |
| do | |
| key_size=$(echo "$key_type" | sed -E 's/-.+//') | |
| algo=$(echo "$key_type" | sed -E 's/.+-//') | |
| if [ ecdsa = $algo ] | |
| then | |
| key_size="-name $key_size" | |
| fi | |
| try openssl $(generate_key_command $algo) \ | |
| -out out/$key_type-intermediate.key $key_size | |
| done | |
| for key_type in $key_types | |
| do | |
| key_size=$(echo "$key_type" | sed -E 's/-.+//') | |
| algo=$(echo "$key_type" | sed -E 's/.+-//') | |
| if [ ecdsa = $algo ] | |
| then | |
| key_size="-name $key_size" | |
| fi | |
| for signer_key_type in $key_types | |
| do | |
| try openssl $(generate_key_command $algo) \ | |
| -out out/$key_type-ee-by-$signer_key_type-intermediate.key $key_size | |
| done | |
| done | |
| # The root signs the intermediates. | |
| for key_type in $key_types | |
| do | |
| key_size=$(echo "$key_type" | sed -E 's/-.+//') | |
| algo=$(echo "$key_type" | sed -E 's/.+-//') | |
| CA_COMMON_NAME="$key_size $algo Test intermediate CA" \ | |
| CA_DIR=out \ | |
| CA_NAME=req_env_dn \ | |
| KEY_SIZE=$key_size \ | |
| ALGO=$algo \ | |
| CERT_TYPE=intermediate \ | |
| try openssl req \ | |
| -new \ | |
| -key out/$key_type-intermediate.key \ | |
| -out out/$key_type-intermediate.csr \ | |
| -config ca.cnf | |
| # Make sure the signer's DB file exists. | |
| touch out/2048-rsa-root-index.txt | |
| CA_COMMON_NAME="2048 RSA Test Root CA" \ | |
| CA_DIR=out \ | |
| CA_NAME=req_env_dn \ | |
| KEY_SIZE=2048 \ | |
| ALGO=rsa \ | |
| CERT_TYPE=root \ | |
| try openssl ca \ | |
| -batch \ | |
| -extensions ca_cert \ | |
| -in out/$key_type-intermediate.csr \ | |
| -out out/$key_type-intermediate.pem \ | |
| -config ca.cnf | |
| done | |
| # The intermediates sign the end-entities. | |
| for key_type in $key_types | |
| do | |
| for signer_key_type in $key_types | |
| do | |
| key_size=$(echo "$key_type" | sed -E 's/-.+//') | |
| algo=$(echo "$key_type" | sed -E 's/.+-//') | |
| signer_key_size=$(echo "$signer_key_type" | sed -E 's/-.+//') | |
| signer_algo=$(echo "$signer_key_type" | sed -E 's/.+-//') | |
| touch out/$signer_key_type-intermediate-index.txt | |
| KEY_SIZE=$key_size \ | |
| try openssl req \ | |
| -new \ | |
| -key out/$key_type-ee-by-$signer_key_type-intermediate.key \ | |
| -out out/$key_type-ee-by-$signer_key_type-intermediate.csr \ | |
| -config ee.cnf | |
| CA_COMMON_NAME="$signer_key_size $algo Test intermediate CA" \ | |
| CA_DIR=out \ | |
| CA_NAME=req_env_dn \ | |
| KEY_SIZE=$signer_key_size \ | |
| ALGO=$signer_algo \ | |
| CERT_TYPE=intermediate \ | |
| try openssl ca \ | |
| -batch \ | |
| -in out/$key_type-ee-by-$signer_key_type-intermediate.csr \ | |
| -out out/$key_type-ee-by-$signer_key_type-intermediate.pem \ | |
| -config ca.cnf | |
| done | |
| done | |