Skip to content

Commit 15ff0cc

Browse files
committed
clarify port requirements and address CR comments
Signed-off-by: Mary Dickson <mary.dickson@virtru.com>
1 parent adecf86 commit 15ff0cc

5 files changed

Lines changed: 113 additions & 11 deletions

File tree

docs/getting-started/managing-platform.mdx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,12 +262,21 @@ otdfctl decrypt <file.tdf>
262262

263263
### Default Ports
264264

265+
OpenTDF exposes the following ports on your host machine:
266+
267+
- **8080** - Platform API (direct HTTP/2 access)
268+
- **8443** - Platform API (HTTPS via Caddy reverse proxy)
269+
- **9443** - Keycloak (HTTPS via Caddy reverse proxy)
270+
- **2019** - Caddy admin API and metrics
271+
272+
PostgreSQL (5432) runs internally in the Docker network and is not exposed to the host.
273+
274+
You can configure these ports in `~/.opentdf/platform/.env` if needed:
265275
```shell
266-
# Configure in ~/.opentdf/platform/.env if needed
276+
PLATFORM_HTTP_PORT=8080
267277
PLATFORM_PORT=8443
268278
KEYCLOAK_PORT=9443
269279
CADDY_ADMIN_PORT=2019
270-
POSTGRES_PORT=5432
271280
```
272281

273282
### Access Points

docs/getting-started/quickstart.mdx

Lines changed: 97 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,16 @@ The OpenTDF Platform is the core service that enforces attribute-based access co
142142

143143
You'll run a local instance using Docker. This includes the [Platform](https://github.com/opentdf/platform/tree/main), [Keycloak](https://www.keycloak.org/) (for user authentication), and [PostgreSQL](https://www.postgresql.org/) (for storing attributes and policies).
144144

145-
:::warning
146-
Not for production use.
145+
:::danger ⚠️ EVALUATION AND DEVELOPMENT ONLY
146+
**This quickstart setup is NOT intended for production use.**
147+
148+
This configuration uses:
149+
- Self-signed certificates
150+
- Default credentials and secrets
151+
- Insecure TLS settings
152+
- No data persistence guarantees
153+
154+
For production deployment guidance, visit: https://opentdf.io
147155
:::
148156

149157
#### Step 1: Check Prerequisites
@@ -161,6 +169,10 @@ chmod +x check.sh
161169
./check.sh
162170
```
163171

172+
:::note Sudo Password Prompt
173+
You may be prompted for your sudo password during the "Checking permissions..." step. This is needed to verify write access to `/etc/hosts` (required for adding local domain mappings) and to check Docker permissions.
174+
:::
175+
164176
<details>
165177
<summary>Expected output</summary>
166178

@@ -186,10 +198,10 @@ Checking disk space...
186198
✓ Disk space: 50GB available
187199

188200
Checking port availability...
201+
✓ Port 8080 is available
189202
✓ Port 8443 is available
190203
✓ Port 9443 is available
191204
✓ Port 2019 is available
192-
✓ Port 5432 is available
193205

194206
Checking permissions...
195207
✓ sudo access available (will prompt for password)
@@ -208,7 +220,7 @@ Ready to install OpenTDF:
208220
The script checks:
209221
- Docker is installed and running
210222
- Docker Compose is available
211-
- Required ports are available (8443, 9443, 2019, 5432)
223+
- Required ports are available (8080, 8443, 9443, 2019)
212224
- Sufficient disk space (10GB+) and RAM (4GB+)
213225
- curl is installed
214226
- sudo access for /etc/hosts modification
@@ -372,6 +384,17 @@ otdfctl profile create --tls-no-verify platform-otdf-local https://platform.open
372384
otdfctl auth client-credentials opentdf secret
373385
```
374386

387+
:::note Linux Keyring Limitation
388+
On Linux systems, you may see a warning: `Warning: Keyring storage is not available on Linux`. This is a known limitation. As a workaround, you can create the profile with credentials in one command:
389+
390+
```shell
391+
otdfctl profile create --tls-no-verify \
392+
--with-client-creds='{"clientId":"opentdf", "clientSecret":"secret"}' \
393+
--host=https://platform.opentdf.local:8443 \
394+
platform-otdf-local
395+
```
396+
:::
397+
375398
Expected output:
376399
> ```console
377400
> SUCCESS Profile platform-otdf-local created
@@ -425,6 +448,76 @@ Expected output (encrypted binary data):
425448
426449
As you can see, the file contains encrypted binary data and JSON metadata - not readable plain text. This confirms the encryption worked.
427450
451+
#### Understanding TDF File Structure
452+
453+
TDF files are actually ZIP archives containing the encrypted payload and metadata. You can inspect the structure using standard zip tools:
454+
455+
```shell
456+
unzip -l example.tdf
457+
```
458+
459+
Expected output:
460+
> ```console
461+
> Archive: example.tdf
462+
> Length Date Time Name
463+
> --------- ---------- ----- ----
464+
> 35 01-01-2025 12:00 0.payload
465+
> 1234 01-01-2025 12:00 0.manifest.json
466+
> --------- -------
467+
> 1269 2 files
468+
> ```
469+
470+
To view the manifest (which contains policy and encryption metadata):
471+
472+
```shell
473+
unzip -p example.tdf 0.manifest.json | jq
474+
```
475+
476+
Expected output:
477+
> ```json
478+
> {
479+
> "encryptionInformation": {
480+
> "type": "split",
481+
> "policy": "eyJ1dWlkIjoiZjQyMzI4Y...",
482+
> "method": {
483+
> "algorithm": "AES-256-GCM",
484+
> "isStreamable": true,
485+
> "iv": "base64encodediv=="
486+
> },
487+
> "integrityInformation": {
488+
> "rootSignature": {
489+
> "alg": "HS256",
490+
> "sig": "base64encodedsignature=="
491+
> },
492+
> "segmentSizeDefault": 1048576,
493+
> "encryptedSegmentSizeDefault": 1048604
494+
> },
495+
> "keyAccess": [
496+
> {
497+
> "type": "wrapped",
498+
> "url": "https://platform.opentdf.local:8443/kas",
499+
> "protocol": "kas",
500+
> "wrappedKey": "base64encodedkey==",
501+
> "policyBinding": "base64encodedbinding==",
502+
> "encryptedMetadata": "base64encodedmetadata=="
503+
> }
504+
> ]
505+
> },
506+
> "payload": {
507+
> "type": "reference",
508+
> "url": "0.payload",
509+
> "protocol": "zip",
510+
> "isEncrypted": true
511+
> }
512+
> }
513+
> ```
514+
515+
The manifest contains:
516+
- **Encryption details**: Algorithm (AES-256-GCM), initialization vector, integrity signatures
517+
- **Key Access**: How to retrieve the decryption key from the Key Access Server (KAS)
518+
- **Policy binding**: The attributes and access policies protecting this data
519+
- **Payload reference**: Location of the encrypted content within the zip file
520+
428521
### Decrypt the File
429522
430523
Now decrypt it to retrieve the original content:

docusaurus.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ const config: Config = {
175175
},
176176
{
177177
label: "Roadmap",
178-
href: "https://github.com/orgs/opentdf/discussions/1806",
178+
href: "https://opentdf.io/appendix/matrix",
179179
},
180180
],
181181
},

static/quickstart/check.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,10 @@ check_port() {
151151
fi
152152
}
153153

154+
check_port 8080 || true
154155
check_port 8443 || true
155156
check_port 9443 || true
156157
check_port 2019 || true
157-
check_port 5432 || true
158158
echo ""
159159

160160
# Check for sudo access (needed for /etc/hosts)

tests/quickstart.bats

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ setup() {
8282

8383
# Port checking tests
8484
@test "check.sh port validation works" {
85+
run bash -c "grep -q 'check_port.*8080' $SCRIPT_DIR/check.sh"
86+
[ "$status" -eq 0 ]
87+
8588
run bash -c "grep -q 'check_port.*8443' $SCRIPT_DIR/check.sh"
8689
[ "$status" -eq 0 ]
8790

@@ -90,9 +93,6 @@ setup() {
9093

9194
run bash -c "grep -q 'check_port.*2019' $SCRIPT_DIR/check.sh"
9295
[ "$status" -eq 0 ]
93-
94-
run bash -c "grep -q 'check_port.*5432' $SCRIPT_DIR/check.sh"
95-
[ "$status" -eq 0 ]
9696
}
9797

9898
# Script structure tests

0 commit comments

Comments
 (0)