PKI
Public Key Infrastructure operations for the domus certificate authority.
CA Hierarchy
Root CA (offline, 10-year validity)
└── Intermediate CA (Vault-managed, 3-year validity)
├── Server certificates (1-year max)
├── Client certificates — EAP-TLS (90-day to 1-year)
└── SSH CA (Vault ssh engine)
Vault PKI Operations
Check the intermediate CA — subject, validity, serial
vault read -format=json pki_int/cert/ca | jq -r '.data.certificate' | \
openssl x509 -noout -subject -dates -serial
List available PKI roles
vault list pki_int/roles
Read role configuration — check allowed domains, TTL, key type
vault read pki_int/roles/domus-server
Issue a server certificate
vault write pki_int/issue/domus-server \
common_name="web.inside.domusdigitalis.dev" \
alt_names="web" \
ip_sans="10.50.1.100" \
ttl=720h
Issue a client certificate for 802.1X EAP-TLS
vault write pki_int/issue/domus-client \
common_name="modestus-razer.inside.domusdigitalis.dev" \
ttl=2160h
CSR Workflow
When a service needs a certificate but cannot use Vault directly.
Generate key and CSR with SAN
openssl req -new -newkey rsa:2048 -nodes \
-keyout server.key \
-subj "/CN=web.inside.domusdigitalis.dev" \
-addext "subjectAltName=DNS:web.inside.domusdigitalis.dev,DNS:web,IP:10.50.1.100" \
-out server.csr
Inspect the CSR before submitting
openssl req -in server.csr -noout -text | grep -A3 "Subject\|Alternative"
Sign CSR with the intermediate CA (manual, non-Vault)
openssl x509 -req -in server.csr -CA intermediate-ca.pem -CAkey intermediate-ca.key \
-CAcreateserial -sha256 -days 365 \
-extfile server-ext.cnf -extensions server_cert \
-out server.pem
Certificate Revocation
Revoke via Vault
vault write pki_int/revoke serial_number=<serial>
Tidy expired certs and rebuild CRL
vault write pki_int/tidy \
tidy_cert_store=true \
tidy_revoked_certs=true \
safety_buffer=72h
Check CRL contents (manual CA)
openssl crl -in crl.pem -noout -text
Chain Building
Assemble the full chain — leaf first, root last
cat server.pem intermediate-ca.pem root-ca.pem > fullchain.pem
Verify the assembled chain
openssl verify -CAfile root-ca.pem -untrusted intermediate-ca.pem server.pem
Trust Store Management
Install a CA certificate on Arch Linux
sudo cp domus-root-ca.pem /etc/ca-certificates/trust-source/anchors/
sudo update-ca-trust
Verify the CA is trusted system-wide
openssl verify -CApath /etc/ssl/certs server.pem
Certificate Extensions Reference
serverAuth — web servers, API endpoints clientAuth — EAP-TLS, mutual TLS, ISE endpoints serverAuth,clientAuth — server that also authenticates to peers codeSigning — signed binaries and scripts OCSPSigning — OCSP responder