Docs

Everything you need to deploy, monitor, and splice TLS connections.

Contents

Quick Start

The typical journey from install to PQC migration:

  1. Install — one command, starts monitoring automatically
  2. Review — crypto inventory fills up on the dashboard
  3. Policy — exclude pinned or sensitive domains
  4. Splice — click "splice" on the dashboard, agents switch within 60s

No SSH after install. No config files to edit. The dashboard controls everything.

Installation

Register at tlslane.com/register to get your agent token and install command.

One-line install

$ curl -sL 'https://tlslane.com/install?token=YOUR_TOKEN' | sudo sh -s -- --yes

The script auto-detects your OS, architecture, and distro (via /etc/os-release and glibc version). RHEL 8, CentOS 8, and Amazon Linux 2 are automatically detected and get the -el8 binary. Use --el8 to override if auto-detection is wrong (containers, chroots). Omit --yes to get a confirmation prompt (requires interactive shell, not curl | sh).

Manual install

For manual installation, choose the correct binary for your system:

# RHEL 9+, Debian 12+, Ubuntu 22.04+, Fedora 37+ $ curl -sfL https://tlslane.com/download/tlslane-linux-amd64 -o /usr/local/bin/tlslane # RHEL 8, CentOS 8, Amazon Linux 2 (proxy mode only) $ curl -sfL https://tlslane.com/download/tlslane-linux-amd64-el8 -o /usr/local/bin/tlslane $ chmod +x /usr/local/bin/tlslane $ echo 'YOUR_TOKEN' | sudo tee /etc/tlslane/token
The token is stored system-wide at /etc/tlslane/token since the agent typically runs as a system daemon. You can also pass it via --token flag or TLSLANE_TOKEN environment variable.

Multiple Hosts

The same token works on every host. Each host registers as a separate agent with its own hostname. Run the same install command on each machine:

$ curl -sL 'https://tlslane.com/install?token=YOUR_TOKEN' | sudo sh -s -- --yes

The install script auto-detects OS, architecture, and glibc version, then downloads the correct binary.

Direct download URLs

For fleet tools that need explicit binary URLs:

BinaryTargets
tlslane-linux-amd64RHEL 9+, Debian 12+, Ubuntu 22.04+, Fedora 37+, Amazon Linux 2023
tlslane-linux-amd64-el8RHEL 8, CentOS 8, Amazon Linux 2, Ubuntu 18.04+, Debian 10+ (proxy mode only)
# Direct download (skip auto-detection) $ curl -sfL https://tlslane.com/download/tlslane-linux-amd64 -o /usr/local/bin/tlslane $ chmod +x /usr/local/bin/tlslane

Ansible

# playbook.yml - hosts: all become: yes tasks: - name: Install tlslane shell: curl -sL 'https://tlslane.com/install?token=YOUR_TOKEN' | sh -s -- --yes

cloud-init

# cloud-config runcmd: - curl -sL 'https://tlslane.com/install?token=YOUR_TOKEN' | sh -s -- --yes

All agents appear on your Hosts dashboard page.

Monitor Mode

After install, agents start in monitor mode. This observes TLS handshakes and reports cipher suite, version, and key exchange information.

$ sudo tlslane

Uses eBPF/TC to passively read packets off the network interface. Traffic is not modified or terminated. Sees all TLS connections on the host transparently, no per-application configuration needed.

Proxy fallback

On systems where inline mode is not available (non-Linux, kernel < 4.9), proxy mode can be used as a fallback:

$ sudo tlslane --proxy
Proxy mode terminates and re-establishes TLS connections through a local relay. This requires the TLS Lane root CA to be trusted (done automatically by the install script).

Output (both modes):

2026-03-26 10:15:03 example.com TLS 1.3 X25519MLKEM768 AES-256-GCM 2026-03-26 10:15:04 api.stripe.com TLS 1.3 X25519 AES-256-GCM 2026-03-26 10:15:05 legacy.internal.corp TLS 1.2 P-256 AES-128-GCM

Each line shows the server's negotiated TLS version, key exchange group, and cipher suite. This data is batched and sent to your dashboard every 30 seconds.

Inline mode is recommended — it captures all TLS traffic passively without modifying connections, and no per-application configuration is needed.

Splice Mode

Splice mode performs two independent TLS handshakes on each connection, upgrading the cryptography between client and server.

You can enable splice from the Hosts dashboard (see Remote Mode Control) or from the command line:

Splice all traffic

$ sudo tlslane splice

Splice specific domains

$ sudo tlslane splice example.com api.internal.corp

Splice all except specific domains

$ sudo tlslane splice --exclude banking.com health.gov
The install script automatically generates and trusts the CA. If you installed manually, run sudo tlslane ca generate then sudo tlslane ca trust before splicing.

Inbound splice with your own certificate

Inbound connections are those where external clients connect to your service — you are the server. The agent needs a real server certificate for these so clients trust the connection without installing the TLS Lane CA. For outbound connections (your service connecting to external servers), the agent uses a CA-signed certificate automatically — no configuration needed.

To provide your own server certificate for inbound splice:

$ sudo tlslane splice --cert /etc/letsencrypt/live/example.com/fullchain.pem \ --key /etc/letsencrypt/live/example.com/privkey.pem

For multiple domains, use config.yaml:

# /etc/tlslane/config.yaml certs: - cert: /etc/letsencrypt/live/example.com/fullchain.pem key: /etc/letsencrypt/live/example.com/privkey.pem - cert: /etc/tlslane/api.crt key: /etc/tlslane/api.key

Domains are extracted automatically from each certificate's CN and Subject Alternative Names. The matching cert is selected by SNI (exact match first, then wildcard). Outbound connections continue to use the CA-signed approach.

Cert files are read at startup. Works with certbot — just restart the agent after renewal, or configure a certbot deploy hook.

Fleet cert provisioning

For fleets where each host serves the same domain (e.g. behind a load balancer), provision the cert alongside the install:

Ansible

# playbook.yml - hosts: webservers become: yes tasks: - name: Install tlslane shell: curl -sL 'https://tlslane.com/install?token=YOUR_TOKEN' | sh -s -- --yes - name: Deploy server certificate copy: src: files/server.crt dest: /etc/tlslane/server.crt mode: '0644' - name: Deploy server key copy: src: files/server.key dest: /etc/tlslane/server.key mode: '0600' - name: Configure inbound splice certs copy: dest: /etc/tlslane/config.yaml content: | certs: - cert: /etc/tlslane/server.crt key: /etc/tlslane/server.key - name: Restart agent systemd: name: tlslane state: restarted

cloud-init

# cloud-config write_files: - path: /etc/tlslane/config.yaml content: | certs: - cert: /etc/tlslane/server.crt key: /etc/tlslane/server.key runcmd: - curl -sL 'https://tlslane.com/install?token=YOUR_TOKEN' | sh -s -- --yes # copy cert/key from secrets manager, vault, or instance metadata - aws secretsmanager get-secret-value --secret-id prod/tls-cert --query SecretString --output text > /etc/tlslane/server.crt - aws secretsmanager get-secret-value --secret-id prod/tls-key --query SecretString --output text > /etc/tlslane/server.key - chmod 600 /etc/tlslane/server.key - systemctl restart tlslane

Per-host certs with certbot

For hosts with their own Let's Encrypt certificates:

# /etc/tlslane/config.yaml certs: - cert: /etc/letsencrypt/live//fullchain.pem key: /etc/letsencrypt/live//privkey.pem
# certbot deploy hook: /etc/letsencrypt/renewal-hooks/deploy/tlslane.sh #!/bin/sh systemctl restart tlslane

Dashboard cert push

The Certificates page lets you distribute a server certificate to online agents without SSH access. This is useful for fleets behind a load balancer that share a wildcard or SAN cert.

How it works:

Cert push is not a PKI engine — it does not issue, rotate, or revoke certificates. Bring your own cert from any CA or ACME provider. For full certificate lifecycle management (issuance, rotation, revocation), use an external secret manager and provision certs via config or Ansible.

The Certificates page also shows an installed certificates inventory reported by each agent, including CN, SANs, issuer, key type, expiry, and signature algorithm. This updates every 30 seconds.

Hosts Dashboard

The Hosts page shows every host running tlslane under your account:

ColumnDescription
Statusonline (heartbeat within 90s) or offline
HostnameMachine hostname (from system)
OSOperating system and kernel version
Versiontlslane binary version
HostingAuto-detected: cloud or on-prem
ModeCurrent mode: monitor or splice
FlowsActive TLS flows being tracked
ErrorsSplice errors (handshake failures)
DiskAgent disk free percentage. Red <5%, amber <10%.
Last SeenLast heartbeat (every 30 seconds)

Crypto Inventory

The Crypto Inventory page shows your fleet's cryptographic posture at a glance.

Summary cards

Four cards at the top show total domains observed and the breakdown by risk level:

A progress bar shows PQC migration status as a percentage of total connections.

Per-host filtering

Click a hostname button above the summary to see only that host's inventory. Summary cards and progress bar update to reflect the selected host. Click "All hosts" to return to the aggregate view.

Connection details table

The table is sorted by risk (legacy first, then modern, then PQC) so the most urgent items are always at the top.

ColumnDescription
RiskClassification: legacy, modern, or pqc
Directioninbound — external clients connecting to your service (you are the server). outbound — your service connecting to external servers (you are the client).
DomainDomain name observed in the TLS handshake (SNI)
TagSystem classification (e.g. payment, email, identity)
TLS VersionServer-negotiated TLS version
Key ExchangeKey exchange group (P-256, X25519, ML-KEM-768, etc.)
CipherServer cipher suite
CertServer certificate key type and size (e.g. ECDSA-256, RSA-2048). Available in splice mode.
Actionmonitor, spliced, passthrough, or blocked
CountNumber of connections
Last SeenMost recent connection timestamp

Domain tags

Domains are automatically classified by system type (email, payment, identity, CDN, analytics, storage) based on built-in patterns. You can add custom tags at the bottom of the crypto inventory page using glob patterns (e.g. *.stripe.compayment). Custom tags override auto-classification. Tags are used on the Compliance page to show PQC readiness by system.

Alerts

The Alerts page shows automatically generated alerts. Two types are always active:

Webhook notifications

Configure a webhook URL on the Alerts page to receive a JSON POST for each new alert. Works with Slack, PagerDuty, Zapier, or any HTTP endpoint.

Alert types: agent_offline, legacy_crypto, cert_expiry, disk_space.

{ "type": "agent_offline", "detail": "web-prod-01 is offline", "time": "2026-03-27T10:15:32Z" }

Slack setup

  1. Open your Slack workspace and go to Settings & administration → Manage apps
  2. Search for Incoming WebHooks and click Add to Slack
  3. Choose a channel (e.g. #ops-alerts) and click Add Incoming WebHooks integration
  4. Copy the Webhook URL (starts with https://hooks.slack.com/services/...)
  5. Paste it into the webhook URL field on the Alerts settings page

Slack displays the raw JSON payload. For formatted messages, use a Slack Workflow to transform the webhook into a rich notification.

Agent Groups

Groups let you organize agents by hostname pattern. Create groups on the Hosts page.

Patterns use glob syntax: web-prod-* matches web-prod-01, web-prod-02, etc. Agents are matched automatically — new agents that match the pattern are included without configuration.

Groups are used for:

Policy

Policy controls which domains are spliced, passed through, or blocked when an agent is in splice mode. Use the dashboard policy editor or create a local policy.yaml:

# /etc/tlslane/policy.yaml domains: - pattern: "*.internal.corp" action: splice - pattern: "banking.com" action: passthrough - pattern: "malware.example" action: block
ActionDescription
splicePerform independent TLS handshakes, upgrade crypto
passthroughForward traffic unmodified (monitored only)
blockDrop the connection

Patterns support * (single level) and ** (any depth) wildcards. Dashboard policy overrides local policy.yaml.

Per-group policy

If you have agent groups, the policy page shows group tabs at the top. Select a group to edit its policy. Agents receive the most specific policy that matches their hostname:

  1. Group policy (if the agent's hostname matches a group with a policy)
  2. Account-wide policy (fallback)

Templates

The policy page offers predefined templates to get started quickly:

TemplateDescription
Monitor OnlyPassthrough all traffic — observe without splicing
Splice AllSplice everything with PQC, no exceptions
ConservativePassthrough known cert-pinning domains (Apple, Google, Microsoft, AWS), splice the rest
CNSA 2.0Compliance-focused — passthrough Apple/iCloud, splice everything else for PQC upgrade

Click a template to load it into the editor, then customize and save. Templates are available per-group — different groups can start from different templates.

Version history

Every save creates a version. The version history at the bottom of the policy page shows all previous versions with a show button to view the full YAML. Click rollback to restore a previous version. Each group has its own independent version history.

Generate from inventory

Click "Generate from inventory" to auto-classify domains based on observed crypto. Legacy and modern domains get splice, PQC domains get passthrough. Review and edit before saving.

Reload without restart

Agents poll for policy changes every 60 seconds. For local policy, send SIGHUP to reload: kill -HUP $(pidof tlslane)

Remote Mode Control

The Target column on the Hosts page lets you switch agent modes from the dashboard:

SettingDescription
localAgent uses its own configuration (default after install = monitor)
monitorForce monitor mode from dashboard
spliceForce splice mode from dashboard

The agent picks up the target mode on its next config poll (within 60 seconds). Combined with policy:

This is the recommended way to enable splice after reviewing your crypto inventory. No SSH required — install once, control from the dashboard.

Updates

Update agents from the command line or remotely from the dashboard.

Manual update

$ sudo tlslane update

Downloads the latest version, verifies the SHA256 checksum, backs up the current binary, and replaces it. Use tlslane update --rollback to restore the previous version.

Remote update (staged rollout)

  1. Go to the Hosts page
  2. Enter the target version (e.g. 0.5.4) in the Update column for one agent
  3. The agent downloads, verifies, and restarts within 60 seconds
  4. Verify it's healthy (online, version updated, inventory flowing)
  5. Set the version on remaining agents

An amber badge on "Hosts" in the sidebar shows how many agents are running an older version than the latest release.

Auto-rollback

If a new binary crashes on startup, the agent automatically restores the previous version on the next restart. This is handled via a .updating marker file — no manual intervention needed.

The agent must be running as a systemd service for auto-rollback to work. The install script sets this up automatically.

PQC Compliance

TLS Lane helps organizations meet post-quantum cryptography regulatory requirements by providing continuous cryptographic inventory, audit trails, and migration tracking.

United States

RegulationRequirementHow TLS Lane Helps
CNSA 2.0New NSS acquisitions PQC-compliant by 2027, full migration by 2033Continuous monitoring identifies non-compliant connections. PQC migration progress bar tracks adoption over time.
OMB M-23-02Annual cryptographic inventory with 9 data items per systemAutomated inventory of domains, TLS versions, cipher suites, and key exchange groups. Export as NDJSON for reporting.
NSM-10Federal agencies must mitigate quantum risk by 2035Risk classification (legacy/modern/PQC) per domain. Policy engine enables targeted splice upgrades.
CISA ACDIAutomated cryptographic discovery and inventoryeBPF-based passive discovery requires no agent on target systems. Covers data-in-transit across the network.

Taiwan

AuthorityRequirementHow TLS Lane Helps
數位發展部 (MODA)Published Taiwan's first PQC Migration Guide (後量子密碼遷移指引, April 2025). Recommends organizations inventory cryptographic systems and plan migration.Automated cryptographic inventory with risk classification. Continuous monitoring covers all TLS traffic without manual collection.
金管會 (FSC)Financial Cybersecurity Resilience Blueprint (金融資安韌性發展藍圖, Dec 2025). PQC migration reference guide for financial institutions targeted H1 2026.Audit trail with append-only event logs for compliance evidence. Export as NDJSON for regulatory reporting.
金管會 PQC PilotPilot group of financial institutions conducting cryptographic inventory and risk assessment (since July 2025).Per-domain risk classification (legacy/modern/PQC). Compliance dashboard shows migration progress with CISO-ready metrics.

Audit Trail

Every observed TLS handshake is recorded in an append-only NDJSON file on the agent (/etc/tlslane/events.ndjson). Each line contains:

The log rotates at 100 MB, keeping 9 backups (~1 GB total). Pull event logs from agents via the Compliance or Support page for archival. For real-time forwarding, configure syslog to send events to your SIEM.

Compliance Dashboard

The Compliance page provides a CISO-ready view of your organization's PQC readiness:

SIEM Export

Syslog forwarding (recommended)

Forward compliance events in real-time to your SIEM via syslog. Configure on the Settings page or per-agent:

# CLI $ sudo tlslane --syslog udp://siem.corp:514 # config.yaml syslog: tcp://siem.corp:514 # Environment $ TLSLANE_SYSLOG=udp://siem.corp:514 sudo tlslane

Each event is sent as RFC 5424 with a JSON payload. Facility: authpriv (10), severity: informational (6). TCP uses octet-counted framing (RFC 6587).

When configured via the dashboard Settings page, the syslog URL is pushed to all agents via config poll (within 60 seconds). Agents auto-reconfigure on change and stop forwarding when the URL is cleared.

API export

Export crypto inventory and alerts as NDJSON for batch ingestion:

# Export crypto inventory $ curl -H 'Authorization: Bearer YOUR_TOKEN' \ 'https://manage.tlslane.com/api/export/events' # Export all alerts $ curl -H 'Authorization: Bearer YOUR_TOKEN' \ 'https://manage.tlslane.com/api/export/alerts'

Both endpoints return application/x-ndjson (one JSON object per line), compatible with Splunk HEC, Elastic Filebeat, and Datadog log ingestion.

Support

TLS Lane provides built-in support channels accessible from the dashboard.

Agent errors

When agents encounter errors, the error count appears as a badge on the Support sidebar link. The Support page lists agents with errors, showing hostname, error count, and status.

For each agent with errors, you can:

Log viewer and redaction

After logs are retrieved, click View to open the log viewer. Logs are shown in an editable text area so you can review for personal information (PI/PSI) before submitting.

Only the redacted version is attached to the support ticket — the raw log stays in your account.

Support requests

Logged-in users can submit support tickets from the Support page. Each ticket includes:

After submission, you can track your tickets and exchange replies with support directly in the dashboard.

Contact form

The public Contact page is for general inquiries, enterprise deployments, partnerships, and compliance consulting. No account required.

Performance

TLS Lane is designed for minimal overhead. Run tlslane bench on your own hardware to measure actual performance.

Benchmark results

Measured on AMD Ryzen 9, 100–500 connections, 64 KB data per connection, loopback:

ModeThroughputLatencyCPU / connCPU util
Direct TCP (baseline)234 MB/s0.27 ms0.30 ms113%
Proxy monitor91 MB/s0.69 ms0.66 ms96%
eBPF inline monitorZero overhead — kernel-space passive capture, no proxy

Proxy monitor adds +0.42 ms latency per connection. On a real network with 5–50 ms RTT, this is negligible (<1% of round-trip time).

Capacity

MetricMeasured
New connections/sec~500/sec (proxy mode, single core)
Concurrent connections1,000+ tested with no fd or memory leaks
Memory per connection~100 bytes (session metadata only)
Binary size~5 MB (static OpenSSL + Boost)

Architecture comparison

ApproachHow it worksTrade-offs
eBPF inline (tlslane default)Kernel-space TC classifier reads packets directly off the NIC. No proxy, no TCP termination.Zero overhead for monitoring. Linux 5.8+ only. Cannot modify traffic (monitor only).
Userspace proxy (tlslane proxy)boost::asio TCP relay on localhost. iptables redirects traffic through the proxy.Sub-millisecond overhead. Can splice (modify) TLS. Works on any kernel.
Hardware applianceDedicated hardware with ASIC for TLS acceleration. Sits inline on the network.Lowest latency for inspection. Expensive. Fixed capacity. No PQC upgrade.
Cloud proxyTraffic routes through a cloud service for inspection.No on-prem hardware. Adds network hop latency (5–30 ms). Data leaves your network.

Run your own benchmark

$ tlslane bench $ tlslane bench --connections 1000 $ tlslane bench --connections 500 --size 131072 # 128 KB per connection

Privacy

TLS Lane is designed with privacy as a default:

CLI Reference

CommandDescription
sudo tlslaneMonitor mode (passive, no traffic modification)
sudo tlslane --proxyMonitor mode, proxy fallback (for non-Linux or old kernels)
sudo tlslane spliceSplice all traffic
tlslane splice DOMAIN...Splice specific domains only
tlslane splice --exclude DOMAIN...Splice all except listed domains
tlslane splice --cert PEM --key PEMUse your own cert for inbound splice
sudo tlslane ca generateGenerate root CA
sudo tlslane ca trustInstall CA to system trust store
sudo tlslane ca untrustRemove CA from trust store
sudo tlslane ca removeDelete CA file
tlslane ca showPrint CA certificate PEM
sudo tlslane updateDownload and install latest version
sudo tlslane update --rollbackRestore previous version
tlslane --versionShow version
tlslane --helpShow usage
tlslane --token TOKENSet agent token
tlslane --management URLSet management server URL
tlslane --syslog URLForward events to syslog (udp://host:514 or tcp://host:514)
tlslane --metrics-port NEnable Prometheus /metrics endpoint on port N