Platform Services

Private step-ca Runbook

Deployment, IPMI certificate issuance, trust distribution, renewal, backup, and network controls for the private step-ca instance.

step-ca runs on sa-ca-01 for IPMI/BMC certificates and optional internal mTLS. Its private root is distributed only to managed clients that need to verify private-CA-issued identities.

Workload Specification

FieldValue
Workloadsa-ca-01
Hostsa-stor-01
FormUbuntu 22.04 LXC
VLAN30 (VM Services)
IP10.10.30.30
Resources1 vCPU, 512 MB RAM, 8 GB disk

Install and Initialize

Check the Smallstep release page for the current supported version before using the version recorded by the source design.

wget https://dl.smallstep.com/gh-release/cli/gh-release-header/v0.27.0/step-cli_0.27.0_amd64.deb
wget https://dl.smallstep.com/gh-release/certificates/gh-release-header/v0.27.0/step-ca_0.27.0_amd64.deb
dpkg -i step-cli_0.27.0_amd64.deb step-ca_0.27.0_amd64.deb

step ca init \
  --name "Homelab Internal CA" \
  --dns "sa-ca-01.core.aorxi.io,10.10.30.30" \
  --address ":9000" \
  --provisioner "admin@aorxi.io" \
  --deployment-type standalone

Initialization creates:

  • /root/.step/certs/root_ca.crt: root certificate distributed to trusted clients
  • /root/.step/certs/intermediate_ca.crt: signing intermediate
  • /root/.step/secrets/: CA private keys that require encrypted backup

Record the provisioner password in the approved password manager; it cannot be recovered.

Run as a Service

# /etc/systemd/system/step-ca.service
[Unit]
Description=step-ca
After=network-online.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/step-ca /root/.step/config/ca.json
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl enable --now step-ca
curl -k https://10.10.30.30:9000/health

Issue IPMI Certificates

Get the root fingerprint, then issue a one-year certificate for each BMC:

step certificate fingerprint /root/.step/certs/root_ca.crt

step ca certificate \
  "ipmi-sa-stor-01.core.aorxi.io" \
  ipmi-sa-stor-01.crt \
  ipmi-sa-stor-01.key \
  --ca-url https://10.10.30.30:9000 \
  --root /root/.step/certs/root_ca.crt \
  --not-after 8760h \
  --provisioner "admin@aorxi.io"

Upload the PEM certificate and key through Supermicro → Configuration → SSL Certificate → Upload. Repeat for each BMC hostname in the certificate inventory.

Renewal

IPMI certificates do not renew themselves. The source design calls for a yearly reminder or a tested Redfish-based reissue and upload process.

Test Redfish Behavior per Firmware

The upload example is illustrative. Supermicro Redfish certificate endpoints vary by board and firmware; validate the exact endpoint and payload before automating renewal.

step ca certificate "ipmi-sa-stor-01.core.aorxi.io" new.crt new.key \
  --ca-url https://10.10.30.30:9000 \
  --root /root/.step/certs/root_ca.crt \
  --provisioner "admin@aorxi.io" \
  --not-after 8760h

curl -k -u ADMIN:<password> \
  -X POST https://10.10.10.20/redfish/v1/Managers/1/NetworkProtocol/HTTPS/Certificates \
  -H "Content-Type: application/json" \
  -d "{\"CertificateString\": \"$(cat new.crt new.key)\", \"CertificateType\": \"PEM\"}"

Distribute Root Trust

Install the root only on administration workstations and services that verify private certificates.

# Debian / Ubuntu
scp /root/.step/certs/root_ca.crt root@<host>:/usr/local/share/ca-certificates/homelab-root-ca.crt
ssh root@<host> update-ca-certificates

# macOS administration workstation
security add-trusted-cert -d -r trustRoot \
  -k /Library/Keychains/System.keychain homelab-root-ca.crt

Firefox uses its own certificate store; import the root through Preferences → Privacy & Security → Certificates.

Protect and Recover the CA

Do Not Expose step-ca to the Internet

Port 9000 on sa-ca-01 must never be internet-reachable. Permit only trusted administration networks and approved Site B traffic over WireGuard.

Back up /root/.step/, including /root/.step/secrets/, encrypted to PBS-A. Loss of the private keys without a backup prevents continued issuance and recovery of the private CA chain.

ProtoSourceDestinationPortPurpose
TCPVLANs 10, 20, 10010.10.30.309000Certificate issuance API
TCP10.20.30.0/2410.10.30.309000Cross-site issuance over WireGuard