|
@@ -0,0 +1,87 @@
|
|
|
|
+#!/bin/bash
|
|
|
|
+set -eu
|
|
|
|
+
|
|
|
|
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
|
|
+
|
|
|
|
+# integration/testdata/https (and integration-cli/fixtures/https, which has symlinks to these files)
|
|
|
|
+OUT_DIR="${SCRIPT_DIR}/../integration/testdata/https"
|
|
|
|
+
|
|
|
|
+# generate CA
|
|
|
|
+echo 01 > "${OUT_DIR}/ca.srl"
|
|
|
|
+openssl genrsa -out "${OUT_DIR}/ca-key.pem"
|
|
|
|
+
|
|
|
|
+openssl req \
|
|
|
|
+ -new \
|
|
|
|
+ -x509 \
|
|
|
|
+ -days 3652 \
|
|
|
|
+ -subj "/C=US/ST=CA/L=SanFrancisco/O=Moby-project/OU=ci/CN=moby-ci/name=moby/emailAddress=moby@example.org" \
|
|
|
|
+ -nameopt compat \
|
|
|
|
+ -text \
|
|
|
|
+ -key "${OUT_DIR}/ca-key.pem" \
|
|
|
|
+ -out "${OUT_DIR}/ca.pem"
|
|
|
|
+
|
|
|
|
+# Now that we have a CA, create a server key and certificate signing request.
|
|
|
|
+# Make sure that `"Common Name (e.g. server FQDN or YOUR name)"` matches the hostname you will use
|
|
|
|
+# to connect or just use '*' for a certificate valid for any hostname:
|
|
|
|
+
|
|
|
|
+openssl genrsa -out server-key.pem
|
|
|
|
+openssl req -new \
|
|
|
|
+ -subj "/C=US/ST=CA/L=SanFrancisco/O=Moby-project/OU=ci/CN=server/name=moby/emailAddress=moby@example.org" \
|
|
|
|
+ -text \
|
|
|
|
+ -key "${OUT_DIR}/server-key.pem" \
|
|
|
|
+ -out "${OUT_DIR}/server.csr"
|
|
|
|
+
|
|
|
|
+# Options for server certificate
|
|
|
|
+cat > "${OUT_DIR}/server-options.cfg" << 'EOF'
|
|
|
|
+basicConstraints=CA:FALSE
|
|
|
|
+subjectKeyIdentifier=hash
|
|
|
|
+authorityKeyIdentifier=keyid,issuer
|
|
|
|
+extendedKeyUsage=serverAuth
|
|
|
|
+subjectAltName=DNS:*,DNS:localhost,IP:127.0.0.1,IP:::1
|
|
|
|
+EOF
|
|
|
|
+
|
|
|
|
+# Generate the certificate and sign with our CA
|
|
|
|
+openssl x509 \
|
|
|
|
+ -req \
|
|
|
|
+ -days 3652 \
|
|
|
|
+ -extfile "${OUT_DIR}/server-options.cfg" \
|
|
|
|
+ -CA "${OUT_DIR}/ca.pem" \
|
|
|
|
+ -CAkey "${OUT_DIR}/ca-key.pem" \
|
|
|
|
+ -nameopt compat \
|
|
|
|
+ -text \
|
|
|
|
+ -in "${OUT_DIR}/server.csr" \
|
|
|
|
+ -out "${OUT_DIR}/server-cert.pem"
|
|
|
|
+
|
|
|
|
+# For client authentication, create a client key and certificate signing request
|
|
|
|
+openssl genrsa -out "${OUT_DIR}/client-key.pem"
|
|
|
|
+openssl req -new \
|
|
|
|
+ -subj "/C=US/ST=CA/L=SanFrancisco/O=Moby-project/OU=ci/CN=client/name=moby/emailAddress=moby@example.org" \
|
|
|
|
+ -text \
|
|
|
|
+ -key "${OUT_DIR}/client-key.pem" \
|
|
|
|
+ -out "${OUT_DIR}/client.csr"
|
|
|
|
+
|
|
|
|
+# Options for client certificate
|
|
|
|
+cat > "${OUT_DIR}/client-options.cfg" << 'EOF'
|
|
|
|
+basicConstraints=CA:FALSE
|
|
|
|
+subjectKeyIdentifier=hash
|
|
|
|
+authorityKeyIdentifier=keyid,issuer
|
|
|
|
+extendedKeyUsage=clientAuth
|
|
|
|
+subjectAltName=DNS:*,DNS:localhost,IP:127.0.0.1,IP:::1
|
|
|
|
+EOF
|
|
|
|
+
|
|
|
|
+# Generate the certificate and sign with our CA:
|
|
|
|
+openssl x509 \
|
|
|
|
+ -req \
|
|
|
|
+ -days 3652 \
|
|
|
|
+ -extfile "${OUT_DIR}/client-options.cfg" \
|
|
|
|
+ -CA "${OUT_DIR}/ca.pem" \
|
|
|
|
+ -CAkey "${OUT_DIR}/ca-key.pem" \
|
|
|
|
+ -nameopt compat \
|
|
|
|
+ -text \
|
|
|
|
+ -in "${OUT_DIR}/client.csr" \
|
|
|
|
+ -out "${OUT_DIR}/client-cert.pem"
|
|
|
|
+
|
|
|
|
+rm "${OUT_DIR}/ca.srl"
|
|
|
|
+rm "${OUT_DIR}/ca-key.pem"
|
|
|
|
+rm "${OUT_DIR}"/*.cfg
|
|
|
|
+rm "${OUT_DIR}"/*.csr
|