DEMO/Infrastructure

← Back to dashboard

The certificate plugin's two packages

Audience: operator · Profile: demo · Read this when: you are installing the certificate plugin and need to know which package fits which platform.

Part of Certificates.

The plugin ships as two .psplugin packages over a shared core, with different plugin ids — so both install side by side and neither overwrites the other. They appear in BeyondInsight as two platforms, and that is the part that matters operationally.

Certificate Subordinate CA
Managed credential an end-entity certificate a subordinate certificate authority
Who consumes it the identity itself — a pipeline, an agent, a service another system, which mints its own short-lived certificates beneath it
Backends all nine only the four that can sign a subordinate
isca defaults to false true
bundle defaults to Pkcs12 PemBundle

Which one you want. If the thing that will present the certificate is the identity named in it, the Certificate platform. If the thing that holds it will mint further certificates — PRA Vault issuing session certificates is the case this was built for — the other one.

Why it is a split and not a flag. A subordinate CA is a delegation of issuing authority, not one more credential. Two platforms mean the team that may request a leaf is not automatically the team that may request an issuer, and that separation is expressible in Password Safe's own access model rather than by convention. The dashboard follows the split rather than papering over it, and the refusal you get differs by platform — see Two refusals, and which one you get.

They are the same code. The shared core is the overwhelming majority of it — key generation, CSR construction, bundling, storage, verification, the configuration grammar, every backend — so the two cannot drift apart in behaviour, and everything this page says about configuration applies to both.

One functional account per platform

A functional account is platform-bound, and a managed system inherits its functional account's platform. So an account on Certificate cannot carry a managed system on Subordinate CA: it onboards green and then fails every credential action. A CA serving both therefore holds two functional accounts, one on each platform, carrying the same CA credential.

The dashboard mints them at different times, on purpose:

Teardown deletes both, and only ones the dashboard minted. Missing the second would leave an orphan holding a live enrollment credential after the CA it belonged to is gone.

The nine backends

The Certificate platform's full list. The dashboard provisions the two cloud ones; the rest are certificate authorities a customer already runs, so the dashboard validates their addresses but has no build path for them.

Backend Names accepted Required Can sign a sub-CA
Microsoft ADCS adcs, ad, microsoft-ca ca=, template= refused on policy
EST (RFC 7030) est, rfc7030 url= no — the protocol has no mechanism
EJBCA ejbca, keyfactor-ejbca url=, ca=, and profile= or subcaprofile= yes
HashiCorp Vault PKI vault, vaultpki, hashicorp-vault url=, and role= for a leaf yes
Smallstep step-ca stepca, step, smallstep url=, fingerprint= no
DigiCert ONE digicert, digicert-one url=, profile= no
Sectigo sectigo, sectigo-cm url=, profile= no
AWS Private CA awspca, aws, acm-pca arn= yes
Google Cloud CAS gcpcas, gcp, cas, google-cas project=, location=, pool= yes
Self-signed selfsigned, self none no — a new trust root, not a subordinate

How each of the four signs one, and the grant that follows

Backend How Grant it separately?
awspca the issuance template is switched to SubordinateCACertificate_PathLen{0-3}, chosen from pathlen=. ACM PCA ignores the CSR's basic constraints and builds from the template, so this is the only thing that decides whether a CA comes back yes — restrict acm-pca:IssueCertificate to the subordinate template ARNs
gcpcas the CSR's own extensions are honoured, subject to the pool's issuance policy. The parent needs --max-chain-length=1 or higher no — see below
ejbca a CA-type certificate profile, named with subcaprofile= yes — a CA-type profile is a distinct grant
vaultpki a dedicated endpoint, <mount>/root/sign-intermediate — not a flag on the ordinary signing path, so the two operations cannot be confused yes — update on that path alone

Granting only that is the difference between a compromised functional account minting one bounded authority and minting anything.

GCP is the exception, and it changes where the boundary goes. Issuing a subordinate uses the same privateca.certificates.create as issuing a leaf — what differs is the CSR and the pool's issuance policy, not the permission. So the separation has to be made with a dedicated CA pool whose policy permits CA certificates, and the grant scoped to that pool. There the boundary is the resource rather than the verb.

That is why the path-length choice produces its own CA row rather than being a setting that widens an existing pool: a leaf-only pool and a subordinate-capable one being separate resources, with separate pool-scoped enrollment identities, is the control.

Two refusals, and which one you get

Which refusal an operator sees depends on which platform they are standing on, and the difference is deliberate.

On the Subordinate CA platform, a backend outside the four is declined by name, before any policy is consulted: it says the platform does not support that backend, lists the four it does, and points at the Certificate platform for an end-entity certificate. That names what to use instead, which is what someone who picked the wrong platform needs.

On the Certificate platform, isca= and the constraint options get the backend's own reasoning — because that is the only platform those backends are offered on at all, so "why not ADCS?" is answered there or nowhere:

On a backend that can sign one, isca=true here is legal and does nothing useful, so the answer is the other package — putting an issuer under the access control meant for a leaf is exactly what the split prevents.

Underneath the package's own list sits a second gate: the backend's own capability flag, which fails closed. A backend added later is refused for subordinate issuance until it declares the capability. That direction is deliberate — most certificate authorities cannot sign a subordinate at all, so the unrecognised case is far more likely to be one that should be refused.

selfsignedtest exists in the plugin for its own harness and is refused outright here: it generates and persists its own CA private key unencrypted beside the plugin.

Three of the nine cannot revoke at all — EST has no revocation operation in RFC 7030, step-ca's needs a credential the plugin no longer holds after issuance, and selfsigned publishes nothing to revoke against. On those, Disable Managed Account succeeds and says the certificate stays valid until it expires. That is a success rather than a failure: the backend never could have done it.