Passthrough TLS
In passthrough mode, your agent terminates TLS itself — you hold the private key, and Inkbox never sees it. We issue a signed certificate for your tunnel hostname so third parties get a trusted handshake.
Most users should stick with the default edge mode; passthrough is for compliance constraints requiring TLS to terminate inside your network, or for client-side cert pinning.
Passthrough flow
- Create the tunnel with
tls_mode: "passthrough". Status starts asawaiting_cert— DNS is provisioned but inbound TLS handshakes will fail until you complete step 3. - Generate a CSR locally. The Common Name (CN) must equal your tunnel hostname
{tunnel_name}.inkboxwire.com. Keep the private key on the machine running your agent. - POST the CSR to
/sign-csr. Inkbox validates the CN, signs it, and returns the certificate plus chain. Status flips toactive. - Renew before expiry. Certificates are valid for 90 days. Call
/sign-csragain with a fresh CSR beforecert_expires_at.
Generate a CSR with OpenSSL
This produces tunnel.key (your private key — keep secret) and tunnel.csr (the CSR you'll submit below).
Sign CSR POST
POST /tunnels/{tunnel_id}/sign-csrSubmit a CSR for a passthrough tunnel and receive a signed certificate. Valid only for tunnels with tls_mode: "passthrough" in awaiting_cert or active state.
The first successful signing transitions the tunnel from awaiting_cert to active. Subsequent signings (renewals) are allowed while active.
Rate-limited to 10 successful signings per tunnel per day.
Path parameters
| Parameter | Type | Description |
|---|---|---|
tunnel_id | UUID | Tunnel ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
csr_pem | string | Yes | PEM-encoded CSR. CN must equal {tunnel_name}.inkboxwire.com. |
Request example
Response (200)
Concatenate cert_pem + chain_pem to produce the full chain your agent should present during the TLS handshake.
Error responses
| Status | Description |
|---|---|
| 400 | CSR is malformed, or CN doesn't match {tunnel_name}.inkboxwire.com |
| 409 | Tunnel is not in passthrough mode, or status is not awaiting_cert/active |
| 429 | Daily signing rate limit exceeded |