forked from keycloak/terraform-provider-keycloak
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmtls-certs.sh
More file actions
executable file
·107 lines (95 loc) · 3.69 KB
/
Copy pathmtls-certs.sh
File metadata and controls
executable file
·107 lines (95 loc) · 3.69 KB
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
#!/usr/bin/env bash
set -euo pipefail
CMD="${1:-}"
TLS_DIR="${2:-testdata/tls}"
usage() {
echo "Usage: $0 {create|clean} <certs-dir>"
exit 1
}
require() {
command -v "$1" >/dev/null 2>&1 || {
echo "Error: required command '$1' not found in PATH" >&2
exit 127
}
}
create() {
require openssl
umask 077
mkdir -p "${TLS_DIR}"
echo ">>> Generating CA key and certificate"
openssl genrsa -out "${TLS_DIR}/ca-key.pem" 4096
openssl req -x509 -new -key "${TLS_DIR}/ca-key.pem" -sha256 -days 3650 \
-subj "/C=US/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Dev Test Root" \
-out "${TLS_DIR}/ca-cert.pem"
echo ">>> Generating server key and certificate"
openssl genrsa -out "${TLS_DIR}/server-key.pem" 2048
openssl req -new -key "${TLS_DIR}/server-key.pem" \
-subj "/C=US/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=localhost" \
-out "${TLS_DIR}/server.csr"
cat > "${TLS_DIR}/server.ext" <<EOF
basicConstraints=CA:false
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=DNS:localhost,IP:127.0.0.1
EOF
openssl x509 -req -in "${TLS_DIR}/server.csr" \
-CA "${TLS_DIR}/ca-cert.pem" -CAkey "${TLS_DIR}/ca-key.pem" -CAserial "${TLS_DIR}/ca-cert.srl" -CAcreateserial \
-out "${TLS_DIR}/server-cert.pem" -days 825 -sha256 -extfile "${TLS_DIR}/server.ext"
echo ">>> Generating trusted client key and certificate"
openssl genrsa -out "${TLS_DIR}/client-key.pem" 2048
openssl req -new -key "${TLS_DIR}/client-key.pem" \
-subj "/C=US/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=trusted-client-mtls" \
-out "${TLS_DIR}/client.csr"
cat > "${TLS_DIR}/client.ext" <<EOF
basicConstraints=CA:false
keyUsage=critical,digitalSignature
extendedKeyUsage=clientAuth
subjectAltName=DNS:trusted-client-mtls
EOF
openssl x509 -req -in "${TLS_DIR}/client.csr" \
-CA "${TLS_DIR}/ca-cert.pem" -CAkey "${TLS_DIR}/ca-key.pem" -CAserial "${TLS_DIR}/ca-cert.srl" \
-out "${TLS_DIR}/client-cert.pem" -days 825 -sha256 -extfile "${TLS_DIR}/client.ext"
echo ">>> Generating untrusted client key and certificate"
openssl genrsa -out "${TLS_DIR}/untrusted-client-key.pem" 2048
openssl req -new -key "${TLS_DIR}/untrusted-client-key.pem" \
-subj "/CN=untrusted-client-mtls" \
-out "${TLS_DIR}/untrusted-client.csr"
cat > "${TLS_DIR}/untrusted-client.ext" <<EOF
basicConstraints=CA:false
keyUsage=critical,digitalSignature
extendedKeyUsage=clientAuth
subjectAltName=DNS:untrusted-client-mtls
EOF
# self-signed (not trusted by CA)
openssl x509 -req -in "${TLS_DIR}/untrusted-client.csr" \
-key "${TLS_DIR}/untrusted-client-key.pem" \
-out "${TLS_DIR}/untrusted-client-cert.pem" -days 825 -sha256 -extfile "${TLS_DIR}/untrusted-client.ext"
echo ">>> Cleaning up temporary files"
rm -f \
"${TLS_DIR}/server.csr" \
"${TLS_DIR}/client.csr" \
"${TLS_DIR}/untrusted-client.csr" \
"${TLS_DIR}/server.ext" \
"${TLS_DIR}/client.ext" \
"${TLS_DIR}/untrusted-client.ext" \
"${TLS_DIR}/ca-cert.srl" || true
echo ">>> Done. Certificates are in ${TLS_DIR}"
}
clean() {
umask 077
echo ">>> Removing generated certs and keys in ${TLS_DIR}"
rm -f \
"${TLS_DIR}/ca-key.pem" "${TLS_DIR}/ca-cert.pem" \
"${TLS_DIR}/server-key.pem" "${TLS_DIR}/server-cert.pem" \
"${TLS_DIR}/client-key.pem" "${TLS_DIR}/client-cert.pem" \
"${TLS_DIR}/untrusted-client-key.pem" "${TLS_DIR}/untrusted-client-cert.pem" \
"${TLS_DIR}/server.csr" "${TLS_DIR}/client.csr" "${TLS_DIR}/untrusted-client.csr" \
"${TLS_DIR}/server.ext" "${TLS_DIR}/client.ext" "${TLS_DIR}/untrusted-client.ext" \
"${TLS_DIR}/ca-cert.srl" || true
echo ">>> Done."
}
case "${CMD}" in
create) create ;;
clean) clean ;;
*) usage ;;
esac