Prepare to use TLS in local dev
parent
4314b5e864
commit
2a4538c8d3
@ -1 +1,4 @@
|
||||
passwd
|
||||
*.crt
|
||||
*.key
|
||||
*.csr
|
@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# https://mosquitto.org/man/mosquitto-tls-7.html
|
||||
set -euo pipefail
|
||||
|
||||
# Set working directory to project root
|
||||
cd "$(dirname "$0")/../"
|
||||
CDIR=$(pwd -P)
|
||||
export CDIR
|
||||
|
||||
MOSQUITTO_CERTS_DIR="${CDIR}/.mosquitto/certs"
|
||||
TLS_CERT_DURATION="${TLS_CERT_DURATION:-365}"
|
||||
CA_COMMON_NAME="${CA_COMMON_NAME:-runcible.io}"
|
||||
HOSTNAME=$(hostname)
|
||||
|
||||
warn(){
|
||||
echo -e "\nFOR LOCAL DEVELOPMENT ONLY!!! These certs do not follow best practices.\n\
|
||||
Keys are not encypted! Seriously, don't use this for anything other than local development.\n"
|
||||
}
|
||||
|
||||
generate_ca_cert(){
|
||||
echo "Generating CA key in ${MOSQUITTO_CERTS_DIR}..."
|
||||
openssl genpkey -algorithm RSA -out "${MOSQUITTO_CERTS_DIR}/ca.key"
|
||||
|
||||
echo "Generating CA cert..."
|
||||
openssl req -x509 -new -nodes -key "${MOSQUITTO_CERTS_DIR}/ca.key" -sha256 -days "${TLS_CERT_DURATION}" \
|
||||
-extensions v3_ca -out "${MOSQUITTO_CERTS_DIR}/ca.crt" -subj "/C=US/O=Runcible/CN=${CA_COMMON_NAME}"
|
||||
|
||||
echo "CA cert generation complete."
|
||||
}
|
||||
|
||||
generate_server_cert(){
|
||||
echo "Generating server key..."
|
||||
openssl genrsa -out "${MOSQUITTO_CERTS_DIR}/server.key" 2048
|
||||
|
||||
echo "Generating cert signing request for CA..."
|
||||
openssl req -out "${MOSQUITTO_CERTS_DIR}/server.csr" -key "${MOSQUITTO_CERTS_DIR}/server.key" -new \
|
||||
-subj "/C=US/O=Runcible/CN=${HOSTNAME}"
|
||||
|
||||
echo "Sending server CSR to CA..."
|
||||
openssl x509 -req -in "${MOSQUITTO_CERTS_DIR}/server.csr" -CA "${MOSQUITTO_CERTS_DIR}/ca.crt" \
|
||||
-CAkey "${MOSQUITTO_CERTS_DIR}/ca.key" -CAcreateserial -out "${MOSQUITTO_CERTS_DIR}/server.crt" \
|
||||
-days "${TLS_CERT_DURATION}"
|
||||
|
||||
echo "Server cert generation complete."
|
||||
}
|
||||
|
||||
generate_client_cert(){
|
||||
echo "Creating client cert in $CDIR"
|
||||
echo "Generating client key..."
|
||||
openssl genrsa -out "${CDIR}/client.key" 2048
|
||||
|
||||
echo "Generating client CSR for CA..."
|
||||
openssl req -out "${CDIR}/client.csr" -key "${CDIR}/client.key" -new -subj "/C=US/O=Runcible/CN=localhost"
|
||||
|
||||
echo "Sending client CSR to CA..."
|
||||
openssl x509 -req -in "${CDIR}/client.csr" -CA "${MOSQUITTO_CERTS_DIR}/ca.crt" -CAkey "${MOSQUITTO_CERTS_DIR}/ca.key" \
|
||||
-CAcreateserial -out "${CDIR}/client.crt" -days "${TLS_CERT_DURATION}"
|
||||
|
||||
echo "Client cert generation complete."
|
||||
}
|
||||
|
||||
|
||||
warn
|
||||
generate_ca_cert
|
||||
generate_server_cert
|
||||
generate_client_cert
|
||||
warn
|
Loading…
Reference in New Issue