123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #!/bin/bash
- # This script generates certificates that can be used to test SSL client
- # authentication.
- #
- # 1. A (end-entity) -> B -> C (self-signed root)
- # 2. D (end-entity) -> B -> C (self-signed root)
- try () {
- echo "$@"
- "$@" || exit 1
- }
- try mkdir out
- echo Create the serial number files and indices.
- serial=1000
- for i in B C
- do
- try /bin/sh -c "echo $serial > out/$i-serial"
- serial=$(expr $serial + 1)
- touch out/$i-index.txt
- touch out/$i-index.txt.attr
- done
- echo Generate the keys.
- for i in A B C D
- do
- try openssl genrsa -out out/$i.key 2048
- done
- echo Generate the C CSR
- COMMON_NAME="Root CA" \
- CA_DIR=out \
- ID=C \
- try openssl req \
- -new \
- -key out/C.key \
- -out out/C.csr \
- -config certs.cnf
- echo C signs itself.
- COMMON_NAME="Root CA" \
- CA_DIR=out \
- ID=C \
- try openssl x509 \
- -req -days 3650 \
- -in out/C.csr \
- -extensions ca_cert \
- -extfile certs.cnf \
- -signkey out/C.key \
- -out out/C.pem
- echo Generate the intermediates
- COMMON_NAME="Intermediate CA" \
- CA_DIR=out \
- ID=B \
- try openssl req \
- -new \
- -key out/B.key \
- -out out/B.csr \
- -config certs.cnf
- COMMON_NAME="Root CA" \
- CA_DIR=out \
- ID=C \
- try openssl ca \
- -batch \
- -extensions ca_intermediate_cert \
- -in out/B.csr \
- -out out/B.pem \
- -config certs.cnf
- echo Generate the leaf certs
- COMMON_NAME="Client Cert" \
- ID=A \
- try openssl req \
- -new \
- -key out/A.key \
- -out out/A.csr \
- -config certs.cnf
- echo B signs A
- COMMON_NAME="Intermediate CA" \
- CA_DIR=out \
- ID=B \
- try openssl ca \
- -batch \
- -extensions user_cert \
- -in out/A.csr \
- -out out/A.pem \
- -config certs.cnf
- COMMON_NAME="localhost" \
- ID=D \
- try openssl req \
- -new \
- -key out/D.key \
- -out out/D.csr \
- -config certs.cnf
- echo B signs D
- COMMON_NAME="Intermediate CA" \
- CA_DIR=out \
- ID=B \
- try openssl ca \
- -batch \
- -extensions server_cert \
- -in out/D.csr \
- -out out/D.pem \
- -config certs.cnf
- echo Package the client cert and private key into PKCS12 file
- try /bin/sh -c "cat out/A.pem out/A.key out/B.pem out/C.pem > out/A-chain.pem"
- try openssl pkcs12 \
- -in out/A-chain.pem \
- -out client.p12 \
- -export \
- -passout pass:electron
- echo Package the certs
- try cp out/C.pem rootCA.pem
- try cp out/B.pem intermediateCA.pem
- try cp out/D.key server.key
- try cp out/D.pem server.pem
- try rm -rf out
|