File: generate-certs.sh

package info (click to toggle)
aws-crt-python 0.24.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 75,932 kB
  • sloc: ansic: 418,984; python: 23,626; makefile: 6,035; sh: 4,075; ruby: 208; java: 82; perl: 73; cpp: 25; xml: 11
file content (119 lines) | stat: -rwxr-xr-x 3,768 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/usr/bin/env bash

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

# Usage: ./generate_certs.sh [clean]
# Generates mixed-chain certs for testing
# Use argument "clean" to remove all generated certs

# immediately bail if any command fails
set -e

# Generates certs with given algorithms and bits in $1$2/, ex. ec384/
# $1: rsa or ec
# $2: size of the key used by the leaf and intermediate
# $3: size of the key used by the issuing CA
# $4: digest using in the certificate signatures
# $5: name of the output directory
cert-gen () {
    key_family=$1
    key_size=$2
    ca_key_size=$3
    digest=$4
    dir_name=$5

    echo -e "\n----- generating certs for ec $key_size with $digest $signature -----\n"

    # make directory for certs
    mkdir -p $dir_name
    cd $dir_name

    echo "generating CA private key and certificate"
    openssl req -new -noenc -x509 \
            -newkey ec \
            -pkeyopt ec_paramgen_curve:P-$ca_key_size \
            -keyout  ca-key.pem \
            -out ca-cert.pem \
            -days 65536 \
            -$digest \
            -subj "/C=US/CN=root" \
            -addext "basicConstraints = critical,CA:true" \
            -addext "keyUsage = critical,keyCertSign"

    echo "generating intermediate private key and CSR"
    openssl req  -new -noenc \
            -newkey ec \
            -pkeyopt ec_paramgen_curve:P-$key_size \
            -keyout intermediate-key.pem \
            -out intermediate.csr \
            -subj "/C=US/CN=branch" \
            -addext "basicConstraints = critical,CA:true" \
            -addext "keyUsage = critical,keyCertSign"

    echo "generating server private key and CSR"
    openssl req  -new -noenc \
            -newkey ec \
            -pkeyopt ec_paramgen_curve:P-$key_size \
            -keyout server-key.pem \
            -out server.csr \
            -subj "/C=US/CN=leaf" \
            -addext "subjectAltName = DNS:localhost"

    echo "generating intermediate certificate and signing it"
    openssl x509 -days 65536 \
            -req -in intermediate.csr \
            -$digest \
            -CA ca-cert.pem \
            -CAkey ca-key.pem \
            -CAcreateserial \
            -out intermediate-cert.pem \
            -copy_extensions=copyall

    echo "generating server certificate and signing it"
    openssl x509 -days 65536 \
            -req -in server.csr \
            -$digest \
            -CA intermediate-cert.pem \
            -CAkey intermediate-key.pem \
            -CAcreateserial -out server-cert.pem \
            -copy_extensions=copyall

    touch server-chain.pem
    cat server-cert.pem >> server-chain.pem
    cat intermediate-cert.pem >> server-chain.pem
    cat ca-cert.pem >> server-chain.pem

    echo "verifying server certificates"
    openssl verify -CAfile ca-cert.pem intermediate-cert.pem
    openssl verify -CAfile ca-cert.pem -untrusted intermediate-cert.pem server-cert.pem

    # certificate signing requests are never used after the certs are generated
    rm server.csr
    rm intermediate.csr

    # serial files are generated during the signing process, but are not used
    rm ca-cert.srl
    rm intermediate-cert.srl

    # the private keys of the CA and the intermediate CA are never needed after 
    # signing
    rm ca-key.pem
    rm intermediate-key.pem

    # the intermediate and server certs are included in server-chain.pem, so 
    # the individual files can be deleted
    rm intermediate-cert.pem
    rm server-cert.pem

    cd ..
}

if [[ $1 != "clean" ]]
then
    #         key   key_size  ca_key_size    digest     directory
    cert-gen   ec     384        256         SHA384      ecdsa
else
    echo "cleaning certs"
    rm -rf ecdsa*
fi