[PR #5173] [CLOSED] feat(trust): Add server trust establishment with CA install and certificate pinning (T-5.7) #22265

Open
opened 2026-08-05 06:05:45 -04:00 by saavagebueno · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/netbirdio/netbird/pull/5173
Author: @obtFusi
Created: 1/24/2026
Status: Closed

Base: mainHead: feature/t-5.7-trust-bootstrap


📝 Commits (10+)

  • dfcaebe ci: add GitHub configuration from network-agent pattern
  • 3d1defe Merge pull request #1 from obtFusi/ci/github-config
  • b036814 feat(auth): Add mTLS authentication for Machine Tunnel (S-1 Spikes)
  • 634bd3c chore: add AUDIT files to gitignore
  • 5357588 feat(spike): Add S-1 Windows mTLS spikes - CNG signer and SAN parser
  • e594b07 feat(lab): Add CA bootstrap and verification scripts
  • f52cd3d fix(lab): Fix verify-lab-ca.ps1 parsing bugs
  • 6f72ca7 feat(proto): Generate Go code for Machine Tunnel RPCs
  • a4deec3 feat(mtls): Add per-account AllowedDomains for multi-tenant isolation
  • 648b532 feat(mtls): Add Machine Tunnel RPC handlers (T-3.6)

📊 Changes

64 files changed (+0 additions, -0 deletions)

View changed files

.githooks/pre-commit (+31 -0)
.github/ISSUE_TEMPLATE/bug_report.md (+29 -0)
.github/ISSUE_TEMPLATE/config.yml (+8 -0)
.github/ISSUE_TEMPLATE/epic.md (+39 -0)
📝 .github/ISSUE_TEMPLATE/feature_request.md (+2 -2)
.github/ISSUE_TEMPLATE/story.md (+32 -0)
.github/ISSUE_TEMPLATE/task.md (+31 -0)
.github/dependabot.yml (+31 -0)
.github/workflows/auto-label.yml (+97 -0)
.github/workflows/pr-lint.yml (+36 -0)
📝 .gitignore (+48 -1)
📝 Makefile (+51 -2)
client/internal/tunnel/bootstrap.go (+470 -0)
client/internal/tunnel/bootstrap_test.go (+319 -0)
client/internal/tunnel/certenroll.go (+451 -0)
client/internal/tunnel/certenroll_test.go (+540 -0)
client/internal/tunnel/domainjoin.go (+346 -0)
client/internal/tunnel/domainjoin_test.go (+267 -0)
client/internal/tunnel/trust_other.go (+234 -0)
client/internal/tunnel/trust_test.go (+426 -0)

...and 44 more files

📄 Description

Summary

  • Add certificate pinning support (sha256//BASE64 format) for management server verification
  • Implement CA certificate installation to Windows Trusted Root store (certutil -addstore)
  • Support backup pins for certificate rotation scenarios
  • Add comprehensive unit tests for all pin verification scenarios

Changes

New Files

  • client/internal/tunnel/trust_windows.go - Windows implementation with CA install
  • client/internal/tunnel/trust_other.go - Non-Windows stub (pinning only)
  • client/internal/tunnel/trust_test.go - Unit tests (17 test cases)

Key Functions

Function Purpose
VerifyServerCert() TLS verification callback with pinning support
InstallCACert() Install CA to Windows Trusted Root store
RemoveCACert() Remove CA by thumbprint (cleanup)
GetCertPin() Calculate SHA-256 pin from file/bytes/x509
TrustBootstrap() Complete trust establishment workflow

Configuration

# Option 1: CA Certificate Installation
management_ca_cert: "C:\\ProgramData\\NetBird\\mgmt-ca.crt"

# Option 2: Certificate Pinning (tighter security)
management_cert_pin: "sha256//ABC123..."
management_cert_pin_backup: "sha256//XYZ789..."  # For rotation

Test plan

  • Unit tests pass locally (go test ./client/internal/tunnel/...)
  • go vet passes
  • CI tests pass
  • Integration test: Bootstrap with pinned certificate

Closes #53

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/netbirdio/netbird/pull/5173 **Author:** [@obtFusi](https://github.com/obtFusi) **Created:** 1/24/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `feature/t-5.7-trust-bootstrap` --- ### 📝 Commits (10+) - [`dfcaebe`](https://github.com/netbirdio/netbird/commit/dfcaebe41c86a8aadccc35876b55a2f4d8361bed) ci: add GitHub configuration from network-agent pattern - [`3d1defe`](https://github.com/netbirdio/netbird/commit/3d1defea7cece943ec2b11e760478d0c524ae62b) Merge pull request #1 from obtFusi/ci/github-config - [`b036814`](https://github.com/netbirdio/netbird/commit/b036814fdcdf153323cefc3765c9fd40ae428084) feat(auth): Add mTLS authentication for Machine Tunnel (S-1 Spikes) - [`634bd3c`](https://github.com/netbirdio/netbird/commit/634bd3c19ec7831c3390ba88b3435f16ed626b87) chore: add AUDIT files to gitignore - [`5357588`](https://github.com/netbirdio/netbird/commit/535758810ff5885e4444ac30a8b54d7301844af4) feat(spike): Add S-1 Windows mTLS spikes - CNG signer and SAN parser - [`e594b07`](https://github.com/netbirdio/netbird/commit/e594b07f096b340c63b361b24e13d47105d39203) feat(lab): Add CA bootstrap and verification scripts - [`f52cd3d`](https://github.com/netbirdio/netbird/commit/f52cd3d7880e02974d826c5eeb8f55721beef64d) fix(lab): Fix verify-lab-ca.ps1 parsing bugs - [`6f72ca7`](https://github.com/netbirdio/netbird/commit/6f72ca78a1a3817d35ee4078ec2282ab55c61ea5) feat(proto): Generate Go code for Machine Tunnel RPCs - [`a4deec3`](https://github.com/netbirdio/netbird/commit/a4deec3109066e55f11c61f5d999df84a4c2ad4c) feat(mtls): Add per-account AllowedDomains for multi-tenant isolation - [`648b532`](https://github.com/netbirdio/netbird/commit/648b532034cf9d829fdfdad3dab6034fbf0e04a8) feat(mtls): Add Machine Tunnel RPC handlers (T-3.6) ### 📊 Changes **64 files changed** (+0 additions, -0 deletions) <details> <summary>View changed files</summary> ➕ `.githooks/pre-commit` (+31 -0) ➕ `.github/ISSUE_TEMPLATE/bug_report.md` (+29 -0) ➕ `.github/ISSUE_TEMPLATE/config.yml` (+8 -0) ➕ `.github/ISSUE_TEMPLATE/epic.md` (+39 -0) 📝 `.github/ISSUE_TEMPLATE/feature_request.md` (+2 -2) ➕ `.github/ISSUE_TEMPLATE/story.md` (+32 -0) ➕ `.github/ISSUE_TEMPLATE/task.md` (+31 -0) ➕ `.github/dependabot.yml` (+31 -0) ➕ `.github/workflows/auto-label.yml` (+97 -0) ➕ `.github/workflows/pr-lint.yml` (+36 -0) 📝 `.gitignore` (+48 -1) 📝 `Makefile` (+51 -2) ➕ `client/internal/tunnel/bootstrap.go` (+470 -0) ➕ `client/internal/tunnel/bootstrap_test.go` (+319 -0) ➕ `client/internal/tunnel/certenroll.go` (+451 -0) ➕ `client/internal/tunnel/certenroll_test.go` (+540 -0) ➕ `client/internal/tunnel/domainjoin.go` (+346 -0) ➕ `client/internal/tunnel/domainjoin_test.go` (+267 -0) ➕ `client/internal/tunnel/trust_other.go` (+234 -0) ➕ `client/internal/tunnel/trust_test.go` (+426 -0) _...and 44 more files_ </details> ### 📄 Description ## Summary - Add certificate pinning support (`sha256//BASE64` format) for management server verification - Implement CA certificate installation to Windows Trusted Root store (`certutil -addstore`) - Support backup pins for certificate rotation scenarios - Add comprehensive unit tests for all pin verification scenarios ## Changes ### New Files - `client/internal/tunnel/trust_windows.go` - Windows implementation with CA install - `client/internal/tunnel/trust_other.go` - Non-Windows stub (pinning only) - `client/internal/tunnel/trust_test.go` - Unit tests (17 test cases) ### Key Functions | Function | Purpose | |----------|---------| | `VerifyServerCert()` | TLS verification callback with pinning support | | `InstallCACert()` | Install CA to Windows Trusted Root store | | `RemoveCACert()` | Remove CA by thumbprint (cleanup) | | `GetCertPin()` | Calculate SHA-256 pin from file/bytes/x509 | | `TrustBootstrap()` | Complete trust establishment workflow | ### Configuration ```yaml # Option 1: CA Certificate Installation management_ca_cert: "C:\\ProgramData\\NetBird\\mgmt-ca.crt" # Option 2: Certificate Pinning (tighter security) management_cert_pin: "sha256//ABC123..." management_cert_pin_backup: "sha256//XYZ789..." # For rotation ``` ## Test plan - [x] Unit tests pass locally (`go test ./client/internal/tunnel/...`) - [x] `go vet` passes - [ ] CI tests pass - [ ] Integration test: Bootstrap with pinned certificate ## Related Closes #53 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
saavagebueno added the pull-request label 2026-08-05 06:05:45 -04:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#22265