|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -e |
| 4 | + |
| 5 | +E2E_DATA=./test/e2e |
| 6 | +TEST_DATA=./test/data |
| 7 | +WORKDIR=$(mktemp -d) |
| 8 | + |
| 9 | +trap 'rm -rf -- "${WORKDIR}"' EXIT |
| 10 | + |
| 11 | +if [ ! -d .git ]; then |
| 12 | + echo "This script must be run from the top-level directory of the repository." |
| 13 | + exit 1 |
| 14 | +fi |
| 15 | + |
| 16 | +pushd "${WORKDIR}" > /dev/null |
| 17 | + |
| 18 | +# Setup a certificate for our test CA |
| 19 | +openssl req -x509 -sha256 -days 3650 -newkey rsa:2048 -keyout ca.key -out ca.crt -noenc \ |
| 20 | + -subj "/CN=kube-rbac-proxy-signer" \ |
| 21 | + -addext "keyUsage=digitalSignature,keyEncipherment,cRLSign,keyCertSign" > /dev/null 2>&1 |
| 22 | +CA_CERT=ca.crt |
| 23 | +CA_KEY=ca.key |
| 24 | + |
| 25 | +# Setup a certificate for the test client |
| 26 | +openssl genrsa -out client.key 2048 |
| 27 | +openssl req -key client.key -new -out client.csr -subj '/CN=kube-rbac-proxy-certificates-test' |
| 28 | +openssl x509 -req -CA "${CA_CERT}" -CAkey "${CA_KEY}" -in client.csr -out client.crt -days 3650 -CAcreateserial \ |
| 29 | + -extensions client \ |
| 30 | + -extfile <( |
| 31 | + cat <<EOF |
| 32 | +[client] |
| 33 | +basicConstraints = CA:FALSE |
| 34 | +extendedKeyUsage = clientAuth |
| 35 | +EOF |
| 36 | + ) 2> /dev/null |
| 37 | + |
| 38 | +# Setup a certificate for the kube-rbac-proxy front end |
| 39 | +openssl genrsa -out front-end.key |
| 40 | +openssl req -key front-end.key -new -out front-end.csr -subj '/CN=kube-rbac-proxy-front-end' |
| 41 | +openssl x509 -req -CA "${CA_CERT}" -CAkey "${CA_KEY}" -in front-end.csr -out front-end.crt -days 3650 -CAcreateserial \ |
| 42 | + -extensions server \ |
| 43 | + -extfile <( |
| 44 | + cat <<EOF |
| 45 | +[server] |
| 46 | +basicConstraints = CA:FALSE |
| 47 | +keyUsage = digitalSignature,keyEncipherment |
| 48 | +extendedKeyUsage = serverAuth |
| 49 | +subjectAltName=DNS:kube-rbac-proxy.default.svc.cluster.local |
| 50 | +EOF |
| 51 | + ) 2> /dev/null |
| 52 | + |
| 53 | +# Setup a certificate for the mock-server |
| 54 | +openssl genrsa -out mock-server.key |
| 55 | +openssl req -key mock-server.key -new -out mock-server.csr -subj '/CN=kube-rbac-proxy-mock-server' |
| 56 | +openssl x509 -req -CA "${CA_CERT}" -CAkey "${CA_KEY}" -in mock-server.csr -out mock-server.crt -days 3650 -CAcreateserial \ |
| 57 | + -extensions server \ |
| 58 | + -extfile <( |
| 59 | + cat <<EOF |
| 60 | +[server] |
| 61 | +basicConstraints = CA:FALSE |
| 62 | +keyUsage = digitalSignature,keyEncipherment |
| 63 | +extendedKeyUsage = serverAuth |
| 64 | +subjectAltName=DNS:mock-server.default.svc.cluster.local |
| 65 | +EOF |
| 66 | + ) 2> /dev/null |
| 67 | + |
| 68 | +# Setup a OAuth token signer |
| 69 | +openssl req -x509 -sha256 -days 3650 -newkey rsa:2048 -keyout oauth-token-signer.key -out oauth-token-signer.crt -noenc \ |
| 70 | + -subj "/CN=kube-rbac-proxy-oauth-token-signer" \ |
| 71 | + -addext "keyUsage=digitalSignature,keyEncipherment" > /dev/null 2>&1 |
| 72 | + |
| 73 | +# Clean up the serial number file |
| 74 | +rm -f ca.srl |
| 75 | + |
| 76 | +# Create the device bundles |
| 77 | +cat client.crt "${CA_CERT}" > client-bundle.pem |
| 78 | +cat mock-server.crt "${CA_CERT}" > mock-server-bundle.pem |
| 79 | +cat front-end.crt "${CA_CERT}" > front-end-bundle.pem |
| 80 | + |
| 81 | +# Create the Secret objects |
| 82 | +kubectl create secret generic -n default kube-rbac-proxy-client-certificates \ |
| 83 | + --from-file=tls.crt=client-bundle.pem \ |
| 84 | + --from-file=tls.key=client.key \ |
| 85 | + --from-file=ca.crt="${CA_CERT}" \ |
| 86 | + --dry-run=client -o yaml > client-certificate.yaml |
| 87 | + |
| 88 | +kubectl create secret generic -n default kube-rbac-proxy-ca-certificate \ |
| 89 | + --from-file=tls.crt="${CA_CERT}" \ |
| 90 | + --from-file=tls.key="${CA_KEY}" \ |
| 91 | + --dry-run=client -o yaml > ca-certificate.yaml |
| 92 | + |
| 93 | +kubectl create secret generic -n default kube-rbac-proxy-mock-server-certificate \ |
| 94 | + --from-file=tls.crt=mock-server-bundle.pem \ |
| 95 | + --from-file=tls.key=mock-server.key \ |
| 96 | + --dry-run=client -o yaml > mock-server-certificate.yaml |
| 97 | + |
| 98 | +kubectl create secret generic -n default kube-rbac-proxy-front-end-certificate \ |
| 99 | + --from-file=tls.crt=front-end-bundle.pem \ |
| 100 | + --from-file=tls.key=front-end.key \ |
| 101 | + --dry-run=client -o yaml > front-end-certificate.yaml |
| 102 | + |
| 103 | +popd >/dev/null |
| 104 | + |
| 105 | +# Distribute the certificates to the tests that require them |
| 106 | +cp "${WORKDIR}"/client-certificate.yaml "${E2E_DATA}/clientcertificates/certificate.yaml" |
| 107 | +cp "${WORKDIR}"/client-certificate.yaml "${E2E_DATA}/oidc/client-certificate.yaml" |
| 108 | +cp "${WORKDIR}"/ca-certificate.yaml "${E2E_DATA}/oidc/ca-certificate.yaml" |
| 109 | +cp "${WORKDIR}"/front-end-certificate.yaml "${E2E_DATA}/oidc/front-end-certificate.yaml" |
| 110 | +cp "${WORKDIR}"/mock-server-certificate.yaml "${E2E_DATA}/oidc/mock-server-certificate.yaml" |
| 111 | + |
| 112 | +# Distribute other certificate data |
| 113 | +cp "${WORKDIR}/oauth-token-signer.crt" "${TEST_DATA}/" |
| 114 | +cp "${WORKDIR}/oauth-token-signer.key" "${TEST_DATA}/" |
| 115 | + |
| 116 | +rm -rf -- "${WORKDIR}" |
| 117 | + |
| 118 | +exit 0 |
0 commit comments