| #!/bin/sh |
| |
| # Copyright 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 a two roots - one legacy one signed with MD5, and |
| # another (newer) one signed with SHA256 - and has a leaf certificate signed |
| # by these without any distinguishers. |
| # |
| # The "cross-signed" comes from the fact that both the MD5 and SHA256 roots |
| # share the same Authority Key ID, Subject Key ID, Subject, and Subject Public |
| # Key Info. When the chain building algorithm is evaluating paths, if it prefers |
| # untrusted over trusted, then it will see the MD5 certificate as a self-signed |
| # cert that is "cross-signed" by the trusted SHA256 root. |
| # |
| # The SHA256 root should be (temporarily) trusted, and the resulting chain |
| # should be leaf -> SHA256root, not leaf -> MD5root, leaf -> SHA256root -> |
| # MD5root, or leaf -> MD5root -> SHA256root |
| |
| try() { |
| "$@" || (e=$?; echo "$@" > /dev/stderr; exit $e) |
| } |
| |
| try rm -rf out |
| try mkdir out |
| |
| try /bin/sh -c "echo 01 > out/2048-sha256-root-serial" |
| try /bin/sh -c "echo 02 > out/2048-md5-root-serial" |
| touch out/2048-sha256-root-index.txt |
| touch out/2048-md5-root-index.txt |
| |
| # Generate the key |
| try openssl genrsa -out out/2048-sha256-root.key 2048 |
| |
| # Generate the root certificate |
| CA_COMMON_NAME="Test Dup-Hash Root CA" \ |
| try openssl req \ |
| -new \ |
| -key out/2048-sha256-root.key \ |
| -out out/2048-sha256-root.req \ |
| -config ca.cnf |
| |
| CA_COMMON_NAME="Test Dup-Hash Root CA" \ |
| try openssl x509 \ |
| -req -days 3650 \ |
| -sha256 \ |
| -in out/2048-sha256-root.req \ |
| -out out/2048-sha256-root.pem \ |
| -text \ |
| -signkey out/2048-sha256-root.key \ |
| -extfile ca.cnf \ |
| -extensions ca_cert |
| |
| CA_COMMON_NAME="Test Dup-Hash Root CA" \ |
| try openssl x509 \ |
| -req -days 3650 \ |
| -md5 \ |
| -in out/2048-sha256-root.req \ |
| -out out/2048-md5-root.pem \ |
| -text \ |
| -signkey out/2048-sha256-root.key \ |
| -extfile ca.cnf \ |
| -extensions ca_cert |
| |
| # Generate the leaf certificate request |
| try openssl req \ |
| -new \ |
| -keyout out/ok_cert.key \ |
| -out out/ok_cert.req \ |
| -config ee.cnf |
| |
| # Generate the leaf certificates |
| CA_COMMON_NAME="Test Dup-Hash Root CA" \ |
| try openssl ca \ |
| -batch \ |
| -extensions user_cert \ |
| -days 3650 \ |
| -in out/ok_cert.req \ |
| -out out/ok_cert.pem \ |
| -config ca.cnf |
| |
| try openssl x509 -text \ |
| -in out/2048-md5-root.pem > ../certificates/cross-signed-root-md5.pem |
| try openssl x509 -text \ |
| -in out/2048-sha256-root.pem > ../certificates/cross-signed-root-sha256.pem |
| try openssl x509 -text \ |
| -in out/ok_cert.pem > ../certificates/cross-signed-leaf.pem |