|
| 1 | +#!/bin/bash |
| 2 | +# |
| 3 | +# Generate test certificates for serial number 0 testing (issue #8615) |
| 4 | +# |
| 5 | +# Tests verify that root CAs (self-signed + CA:TRUE) with serial 0 are |
| 6 | +# accepted as trust anchors, while all other cert types with serial 0 |
| 7 | +# are rejected per RFC 5280 section 4.1.2.2. |
| 8 | +# |
| 9 | +# Output files (certs only -- EE keys use temp files): |
| 10 | +# root_serial0.pem / root_serial0_key.pem - Root CA with serial 0 |
| 11 | +# ee_serial0.pem - EE cert with serial 0 (rejected) |
| 12 | +# ee_normal.pem - Normal EE cert (serial 100) |
| 13 | +# selfsigned_nonca_serial0.pem - Self-signed non-CA, serial 0 |
| 14 | + |
| 15 | +set -e |
| 16 | + |
| 17 | +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 18 | +cd "$SCRIPT_DIR" |
| 19 | + |
| 20 | +echo "===================================================" |
| 21 | +echo "Generating serial 0 test certificates in: $SCRIPT_DIR" |
| 22 | +echo "===================================================" |
| 23 | + |
| 24 | +# 1. Create Root CA with serial number 0 |
| 25 | +echo "" |
| 26 | +echo "[1/4] Creating Root CA with serial number 0..." |
| 27 | +openssl req -x509 -newkey rsa:2048 -keyout root_serial0_key.pem -out root_serial0.pem \ |
| 28 | + -days 7300 -nodes -subj "/CN=Test Root CA Serial 0/O=wolfSSL Test/C=US" \ |
| 29 | + -set_serial 0 \ |
| 30 | + -addext "basicConstraints=critical,CA:TRUE" \ |
| 31 | + -addext "keyUsage=critical,keyCertSign,cRLSign" |
| 32 | + |
| 33 | +echo " Root CA serial number:" |
| 34 | +openssl x509 -in root_serial0.pem -noout -serial |
| 35 | + |
| 36 | +# 2. Create end-entity cert with serial 0 signed by root_serial0 |
| 37 | +echo "" |
| 38 | +echo "[2/4] Creating end-entity certificate with serial number 0..." |
| 39 | +openssl req -newkey rsa:2048 -keyout ee_serial0_key.tmp -out ee_serial0.csr.tmp -nodes \ |
| 40 | + -subj "/CN=End Entity Serial 0/O=wolfSSL Test/C=US" |
| 41 | + |
| 42 | +openssl x509 -req -in ee_serial0.csr.tmp -CA root_serial0.pem -CAkey root_serial0_key.pem \ |
| 43 | + -out ee_serial0.pem -days 3650 -set_serial 0 \ |
| 44 | + -extfile <(echo "basicConstraints=CA:FALSE |
| 45 | +keyUsage=digitalSignature,keyEncipherment |
| 46 | +extendedKeyUsage=serverAuth,clientAuth") |
| 47 | + |
| 48 | +rm -f ee_serial0_key.tmp ee_serial0.csr.tmp |
| 49 | + |
| 50 | +echo " End-entity cert serial number:" |
| 51 | +openssl x509 -in ee_serial0.pem -noout -serial |
| 52 | + |
| 53 | +# 3. Create normal end-entity cert signed by root CA with serial 0 |
| 54 | +echo "" |
| 55 | +echo "[3/4] Creating normal end-entity certificate (signed by serial 0 root)..." |
| 56 | +openssl req -newkey rsa:2048 -keyout ee_normal_key.tmp -out ee_normal.csr.tmp -nodes \ |
| 57 | + -subj "/CN=End Entity Normal/O=wolfSSL Test/C=US" |
| 58 | + |
| 59 | +openssl x509 -req -in ee_normal.csr.tmp -CA root_serial0.pem -CAkey root_serial0_key.pem \ |
| 60 | + -out ee_normal.pem -days 3650 -set_serial 100 \ |
| 61 | + -extfile <(echo "basicConstraints=CA:FALSE |
| 62 | +keyUsage=digitalSignature,keyEncipherment |
| 63 | +extendedKeyUsage=serverAuth,clientAuth") |
| 64 | + |
| 65 | +rm -f ee_normal_key.tmp ee_normal.csr.tmp |
| 66 | + |
| 67 | +echo " Normal end-entity cert serial number:" |
| 68 | +openssl x509 -in ee_normal.pem -noout -serial |
| 69 | + |
| 70 | +# 4. Create self-signed non-CA certificate with serial 0 |
| 71 | +echo "" |
| 72 | +echo "[4/4] Creating self-signed non-CA certificate with serial number 0..." |
| 73 | +openssl req -x509 -newkey rsa:2048 -keyout selfsigned_nonca_serial0_key.tmp \ |
| 74 | + -out selfsigned_nonca_serial0.pem -days 3650 -nodes \ |
| 75 | + -subj "/CN=Self-Signed Non-CA Serial 0/O=wolfSSL Test/C=US" \ |
| 76 | + -set_serial 0 \ |
| 77 | + -addext "basicConstraints=CA:FALSE" \ |
| 78 | + -addext "keyUsage=digitalSignature,keyEncipherment" |
| 79 | + |
| 80 | +rm -f selfsigned_nonca_serial0_key.tmp |
| 81 | + |
| 82 | +echo " Self-signed non-CA cert serial number:" |
| 83 | +openssl x509 -in selfsigned_nonca_serial0.pem -noout -serial |
| 84 | + |
| 85 | +echo "" |
| 86 | +echo "===================================================" |
| 87 | +echo "Certificate generation complete!" |
| 88 | +echo "===================================================" |
0 commit comments