Skip to main content

Encryption in Transit

Encryption in Transit

TLS 1.3 and mTLS for all network communication.

Overview

All network traffic is encrypted:

  • External Traffic: TLS 1.3 with strong cipher suites
  • Internal Traffic: mTLS (mutual TLS) for service mesh
  • Compliance: FIPS 140-2, NIST 800-53 SC-8, FedRAMP
  • Certificate Management: Automated rotation with cert-manager

TLS 1.3 Configuration

NGINX (API Gateway)

nginx.conf:

server { listen 443 ssl http2; server_name gateway.local.bluefly.io; # TLS 1.3 only ssl_protocols TLSv1.3; # Strong cipher suites ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'; ssl_prefer_server_ciphers off; # Certificates ssl_certificate /etc/certs/gateway.crt; ssl_certificate_key /etc/certs/gateway.key; ssl_certificate_key /etc/certs/gateway.key; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/certs/ca-chain.crt; # Session cache ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; # HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # Security headers add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "DENY" always; add_header X-XSS-Protection "1; mode=block" always; location / { proxy_pass http://backend; proxy_ssl_verify on; proxy_ssl_trusted_certificate /etc/certs/ca.crt; } }

Node.js (Express)

server.ts:

import * as https from 'https'; import * as fs from 'fs'; import express from 'express'; const app = express(); const httpsOptions = { // TLS 1.3 minVersion: 'TLSv1.3' as const, maxVersion: 'TLSv1.3' as const, // Certificates key: fs.readFileSync('/etc/certs/server.key'), cert: fs.readFileSync('/etc/certs/server.crt'), ca: fs.readFileSync('/etc/certs/ca.crt'), // Cipher suites ciphers: [ 'TLS_AES_256_GCM_SHA384', 'TLS_CHACHA20_POLY1305_SHA256', 'TLS_AES_128_GCM_SHA256' ].join(':'), // Prefer server ciphers honorCipherOrder: false, // Session resumption sessionTimeout: 600, ticketKeys: undefined, // Disable session tickets // OCSP stapling requestOCSP: true }; const server = https.createServer(httpsOptions, app); server.listen(3001, () => { console.log('HTTPS server running on port 3001'); });

Mutual TLS (mTLS)

Service Mesh Configuration

Istio mTLS Policy:

apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: default namespace: llm-platform spec: mtls: mode: STRICT # Require mTLS for all traffic --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-for-all namespace: llm-platform spec: host: "*.llm-platform.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL # Use Istio-managed certificates

gRPC with mTLS

server.ts:

import * as grpc from '@grpc/grpc-js'; import * as fs from 'fs'; // Load certificates const serverCert = fs.readFileSync('/etc/certs/server.crt'); const serverKey = fs.readFileSync('/etc/certs/server.key'); const caCert = fs.readFileSync('/etc/certs/ca.crt'); // Create mTLS credentials const credentials = grpc.ServerCredentials.createSsl( caCert, // CA certificate [{ cert_chain: serverCert, private_key: serverKey }], true // Check client certificate ); // Create gRPC server const server = new grpc.Server(); // Add services server.addService(AgentMeshService, implementation); // Start server with mTLS server.bindAsync( '0.0.0.0:50051', credentials, (err, port) => { if (err) throw err; console.log(`gRPC server with mTLS running on port ${port}`); server.start(); } );

client.ts:

import * as grpc from '@grpc/grpc-js'; import * as fs from 'fs'; // Load certificates const clientCert = fs.readFileSync('/etc/certs/client.crt'); const clientKey = fs.readFileSync('/etc/certs/client.key'); const caCert = fs.readFileSync('/etc/certs/ca.crt'); // Create mTLS credentials const credentials = grpc.credentials.createSsl( caCert, clientKey, clientCert ); // Create client const client = new AgentMeshClient( 'mesh.local.bluefly.io:50051', credentials ); // Make authenticated call client.registerAgent({ agentId: 'agent-001' }, (err, response) => { if (err) console.error(err); else console.log(response); });

Certificate Management

Cert-Manager (Kubernetes)

ClusterIssuer:

apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: internal-ca spec: ca: secretName: ca-key-pair --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: gateway-tls namespace: llm-platform spec: secretName: gateway-tls-secret issuerRef: name: internal-ca kind: ClusterIssuer commonName: gateway.local.bluefly.io dnsNames: - gateway.local.bluefly.io - "*.local.bluefly.io" duration: 2160h # 90 days renewBefore: 720h # 30 days before expiration privateKey: algorithm: RSA size: 2048 usages: - digital signature - key encipherment - server auth - client auth

Automatic Rotation

Rotation Schedule:

  • Leaf certificates: 90 days
  • Intermediate CA: 1 year
  • Root CA: 10 years
  • Auto-renewal: 30 days before expiration

Rotation Monitoring:

class CertificateMonitor { async checkExpiration() { const certs = await this.listCertificates(); for (const cert of certs) { const daysUntilExpiry = this.getDaysUntilExpiry(cert); if (daysUntilExpiry <= 30) { await this.alert({ severity: 'warning', message: `Certificate ${cert.name} expires in ${daysUntilExpiry} days`, action: 'renew' }); } if (daysUntilExpiry <= 7) { await this.alert({ severity: 'critical', message: `Certificate ${cert.name} expires in ${daysUntilExpiry} days!`, action: 'urgent_renew' }); // Auto-renew await this.renewCertificate(cert); } } } }

Protocol-Specific Encryption

PostgreSQL SSL

postgresql.conf:

ssl = on ssl_cert_file = '/etc/certs/server.crt' ssl_key_file = '/etc/certs/server.key' ssl_ca_file = '/etc/certs/ca.crt' ssl_min_protocol_version = 'TLSv1.3' ssl_ciphers = 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256' ssl_prefer_server_ciphers = on

Client Connection:

import { Pool } from 'pg'; const pool = new Pool({ host: 'postgres.local.bluefly.io', port: 5432, database: 'llm_platform', user: 'app_user', password: process.env.DB_PASSWORD, ssl: { rejectUnauthorized: true, ca: fs.readFileSync('/etc/certs/ca.crt').toString(), cert: fs.readFileSync('/etc/certs/client.crt').toString(), key: fs.readFileSync('/etc/certs/client.key').toString() } });

Redis TLS

redis.conf:

tls-port 6380 port 0 # Disable non-TLS tls-cert-file /etc/certs/redis.crt tls-key-file /etc/certs/redis.key tls-ca-cert-file /etc/certs/ca.crt tls-auth-clients yes tls-protocols "TLSv1.3" tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

Client Connection:

import Redis from 'ioredis'; const redis = new Redis({ port: 6380, host: 'redis.local.bluefly.io', tls: { rejectUnauthorized: true, ca: fs.readFileSync('/etc/certs/ca.crt'), cert: fs.readFileSync('/etc/certs/client.crt'), key: fs.readFileSync('/etc/certs/client.key') } });

WebSocket Security

Secure WebSocket (WSS)

Server:

import { WebSocketServer } from 'ws'; import * as https from 'https'; const server = https.createServer(httpsOptions, app); const wss = new WebSocketServer({ server, verifyClient: (info, callback) => { // Verify JWT token const token = info.req.headers.authorization?.split(' ')[1]; jwt.verify(token, publicKey, (err, decoded) => { callback(err === null, err ? 401 : 200); }); } }); wss.on('connection', (ws, req) => { console.log('Secure WebSocket connection established'); ws.on('message', (data) => { // Handle encrypted message }); });

Client:

const ws = new WebSocket('wss://tracer.local.bluefly.io/stream', { headers: { Authorization: `Bearer ${jwtToken}` }, rejectUnauthorized: true, ca: fs.readFileSync('/etc/certs/ca.crt') });

VPN (IPSec)

For admin/developer access:

strongSwan Configuration:

conn bluefly-vpn keyexchange=ikev2 ike=aes256-sha256-modp2048! esp=aes256-sha256-modp2048! dpdaction=clear dpddelay=300s rekey=yes left=%any leftauth=eap-mschapv2 leftid=%any right=vpn.bluefly.io rightauth=pubkey rightsendcert=always rightid="CN=vpn.bluefly.io" rightsubnet=10.0.0.0/8 auto=add

Monitoring & Validation

TLS Scanning

testssl.sh:

# Scan TLS configuration testssl.sh --severity MEDIUM \ https://gateway.local.bluefly.io # Check certificate openssl s_client -connect gateway.local.bluefly.io:443 \ -showcerts < /dev/null # Verify TLS 1.3 nmap --script ssl-enum-ciphers -p 443 gateway.local.bluefly.io

Certificate Expiration Monitoring

# Check expiration echo | openssl s_client -connect gateway.local.bluefly.io:443 2>/dev/null | \ openssl x509 -noout -enddate # Prometheus metric curl -s https://gateway.local.bluefly.io/metrics | \ grep 'ssl_certificate_expiry_seconds'

Compliance

NIST 800-53 SC-8

SC-8: Transmission Confidentiality and Integrity

All network traffic encrypted (TLS 1.3, mTLS) Strong cipher suites only Certificate-based authentication Perfect Forward Secrecy (PFS) HSTS enabled (HTTPHTTPS redirect)

FedRAMP Requirements

FIPS 140-2 validated crypto Mutual authentication (mTLS) Certificate rotation < 90 days Continuous monitoring Audit logging

Next Steps