hashipi

Raspberry Pi Test Cluster for HashiCorp Vault, Nomad and Consul
git clone https://git.in0rdr.ch/hashipi.git
Log | Files | Refs | Pull requests |Archive | README

commit 2b65966381e81ee12c1539d61a63e596e30141db
parent cd2d654d41f655c97413125d8155dfa81249f45b
Author: Andreas Gruhler <agruhl@gmx.ch>
Date:   Sat,  4 Oct 2025 16:20:51 +0200

feat(openbao): use self-signed certs from installer

Diffstat:
MREADME.md | 24+++---------------------
Mhashi-pi.pkr.hcl | 28----------------------------
Mopenbao.sh | 39++++-----------------------------------
Dvault-tls.sh | 38--------------------------------------
4 files changed, 7 insertions(+), 122 deletions(-)

diff --git a/README.md b/README.md @@ -51,27 +51,9 @@ The packer builder "cross" requires `qemu-img`. ## Self-signed TLS Certificates ### OpenBao -To create a new self-signed CA certificate for Bao: -```bash -# create bao self-signed CA certificate in ./tls/vault/ -./vault-tls.sh -``` - -A new self-signed server certificate is created in the Bao provisioning stage. - -The Packer JSON supports a few arguments for Bao server certificates: -```json - "vault_tls_ca_cert": "./tls/vault/ca/vault_ca.pem", - "vault_tls_ca_key": "./tls/vault/ca/vault_ca.key", - "vault_tls_subj_alt_name": "" -``` - -* `vault_tls_ca_cert`: The path of the CA certificate on the Packer build host, - e.g., created with `./vault-tls.sh` -* `vault_tls_ca_key`: The path of the CA key on the Packer build host, e.g., - created with `./vault-tls.sh` -* `vault_tls_subj_alt_name`: Comma seperated list of Subject Alternative Names - (SAN) for the self-signed certificates, e.g., `DNS:vault.example.com` +OpenBao installation uses the self-signed certificates that are initially +created in `/opt/openbao/tls` during the OpenBao installation process from the +official package. ### Nomad The steps to create a set of self-signed certificates for Nomad are not fully diff --git a/hashi-pi.pkr.hcl b/hashi-pi.pkr.hcl @@ -108,21 +108,6 @@ variable "vault_addr" { default = "https://vault.in0rdr.ch" } -variable "vault_tls_ca_cert" { - type = string - default = "./tls/vault/ca/vault_ca.pem" -} - -variable "vault_tls_ca_key" { - type = string - default = "./tls/vault/ca/vault_ca.key" -} - -variable "vault_tls_subj_alt_name" { - type = string - default = "IP:127.0.0.1" -} - variable "vault_transit_server" { type = string default = "" @@ -261,16 +246,6 @@ build { ] } - provisioner "file" { - destination = "/tmp/vault_ca.pem" - source = "${var.vault_tls_ca_cert}" - } - - provisioner "file" { - destination = "/tmp/vault_ca.key" - source = "${var.vault_tls_ca_key}" - } - provisioner "shell" { script = "openbao.sh" remote_folder = "/home/${var.username}" @@ -279,9 +254,6 @@ build { "USERNAME=${var.username}", "HOSTNAME=${var.hostname}", "NOMAD_SERVER=${var.nomad_server}", - "VAULT_TLS_CA_CERT=/tmp/vault_ca.pem", - "VAULT_TLS_CA_KEY=/tmp/vault_ca.key", - "VAULT_TLS_SUBJ_ALT_NAME=${var.vault_tls_subj_alt_name}", "VAULT_TRANSIT_SERVER=${var.vault_transit_server}", "VAULT_TRANSIT_TOKEN=${var.vault_transit_token}" ] diff --git a/openbao.sh b/openbao.sh @@ -15,41 +15,10 @@ rm -rf /etc/openbao/* mkdir -p /etc/openbao/tls # The bao systemd service requires this env file, can be empty touch /etc/openbao/openbao.env -cd /etc/openbao/tls - -# Specify CSR parameters for server key -VAULT_TLS_SUBJ_ALT_NAME=${VAULT_TLS_SUBJ_ALT_NAME:+", $VAULT_TLS_SUBJ_ALT_NAME"} -SERVER_CONFIG=" -[ req ] -commonName = $HOSTNAME -distinguished_name = dn -req_extensions = ext -[ dn ] -CN = Common Name -[ ext ] -subjectAltName = DNS:$HOSTNAME $VAULT_TLS_SUBJ_ALT_NAME -keyUsage=critical,digitalSignature,keyAgreement -" -# Create new private key and CSR -openssl req -config <(echo "$SERVER_CONFIG") -subj "/CN=${HOSTNAME}" -extensions ext -out "${HOSTNAME}.csr" -new -newkey rsa:2048 -nodes -keyout "${HOSTNAME}.key" -# Sign the CSR -openssl x509 -extfile <(echo "$SERVER_CONFIG") -extensions ext -req -in "${HOSTNAME}.csr" -CA "$VAULT_TLS_CA_CERT" -CAkey "$VAULT_TLS_CA_KEY" -CAcreateserial -out "${HOSTNAME}.pem" -days 365 -# Show fingerprint -openssl x509 -in "${HOSTNAME}.pem" -fingerprint -noout - -# Cleanup CA key -rm -rf "$VAULT_TLS_CA_KEY" - -# Change permissions for tls certs -chmod 640 *.key -chmod 644 *.pem - -# Concatenate CA and server certificate -cat "$VAULT_TLS_CA_CERT" >> "${HOSTNAME}.pem" - -# Trust the CA -mv "$VAULT_TLS_CA_CERT" /usr/local/share/ca-certificates/ -update-ca-certificates + +# Symlink self-signed certs of Openbao installer +ln -s /opt/openbao/tls/tls.key "/etc/openbao/tls/$HOSTNAME.key" +ln -s /opt/openbao/tls/tls.crt "/etc/openbao/tls/$HOSTNAME.pem" cat << EOF > /etc/openbao/openbao.hcl ui = true diff --git a/vault-tls.sh b/vault-tls.sh @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -# -# Creates a set of certificates for use with HashiCorp Vault -# https://learn.hashicorp.com/vault/operations/ops-deployment-guide - -# set -o errexit -# set -o nounset -# set -o xtrace - -# https://www.shellhacks.com/yes-no-bash-script-prompt-confirmation/ -# read -p "Do you want to generate a new set of Vault certicates in the directory \"./tls/vault/\" [y/N]? " -n 1 -r -read -p "Do you want to generate a new Vault CA certicate in the directory \"./tls/vault/\" [y/N]? " -n 1 -r -echo # (optional) move to a new line -if [[ ! $REPLY =~ ^[Yy]$ ]] -then - exit 1 -fi - -# Set working dir -VAULT_TLS_BASE_PATH="${VAULT_TLS_BASE_PATH:-./tls/vault/}" -mkdir -p "$VAULT_TLS_BASE_PATH" -cd "$VAULT_TLS_BASE_PATH" - -# Cleanup previously generated certificates -rm -rf certs ca -mkdir -p certs ca - -# Create CA cert -CA_CONFIG=" -[ req ] -distinguished_name = dn -[ dn ] -[ ext ] -basicConstraints = critical, CA:true, pathlen:1 -keyUsage = critical, digitalSignature, cRLSign, keyCertSign -" -openssl req -config <(echo "$CA_CONFIG") -new -newkey rsa:2048 -nodes -days 730 \ - -subj "/CN=Snake Root CA" -x509 -extensions ext -keyout "./ca/vault_ca.key" -out "./ca/vault_ca.pem"