mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-08-17 03:27:02 +08:00
126 lines
3.8 KiB
Go
126 lines
3.8 KiB
Go
package certs
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadOrCreateManagerPersistsAndReusesInstallationCA(t *testing.T) {
|
|
dir := t.TempDir()
|
|
certPath := filepath.Join(dir, "ca.crt")
|
|
keyPath := filepath.Join(dir, "ca.key")
|
|
|
|
manager, certPEM, err := LoadOrCreateManager(certPath, keyPath)
|
|
if err != nil {
|
|
t.Fatalf("LoadOrCreateManager() error = %v", err)
|
|
}
|
|
if isLegacySharedCA(certPEM) {
|
|
t.Fatal("generated CA reused the legacy shared certificate")
|
|
}
|
|
keyInfo, err := os.Stat(keyPath)
|
|
if err != nil {
|
|
t.Fatalf("stat private key: %v", err)
|
|
}
|
|
if runtime.GOOS != "windows" && keyInfo.Mode().Perm() != 0o600 {
|
|
t.Fatalf("private key mode = %o, want 600", keyInfo.Mode().Perm())
|
|
}
|
|
|
|
leaf, err := manager.CertificateForServerName("api2.cursor.sh")
|
|
if err != nil {
|
|
t.Fatalf("CertificateForServerName() error = %v", err)
|
|
}
|
|
ca := parseCertificatePEM(t, certPEM)
|
|
roots := x509.NewCertPool()
|
|
roots.AddCert(ca)
|
|
if _, err := leaf.Leaf.Verify(x509.VerifyOptions{DNSName: "api2.cursor.sh", Roots: roots}); err != nil {
|
|
t.Fatalf("verify generated leaf: %v", err)
|
|
}
|
|
|
|
_, reusedCertPEM, err := LoadOrCreateManager(certPath, keyPath)
|
|
if err != nil {
|
|
t.Fatalf("second LoadOrCreateManager() error = %v", err)
|
|
}
|
|
if !bytes.Equal(certPEM, reusedCertPEM) {
|
|
t.Fatal("installation CA changed between loads")
|
|
}
|
|
}
|
|
|
|
func TestLoadOrCreateManagerCreatesUniqueCAsPerInstallation(t *testing.T) {
|
|
firstDir := t.TempDir()
|
|
secondDir := t.TempDir()
|
|
_, firstCert, err := LoadOrCreateManager(filepath.Join(firstDir, "ca.crt"), filepath.Join(firstDir, "ca.key"))
|
|
if err != nil {
|
|
t.Fatalf("create first CA: %v", err)
|
|
}
|
|
_, secondCert, err := LoadOrCreateManager(filepath.Join(secondDir, "ca.crt"), filepath.Join(secondDir, "ca.key"))
|
|
if err != nil {
|
|
t.Fatalf("create second CA: %v", err)
|
|
}
|
|
if bytes.Equal(firstCert, secondCert) {
|
|
t.Fatal("separate installations received the same CA certificate")
|
|
}
|
|
}
|
|
|
|
func TestLoadOrCreateManagerReplacesLegacySharedCertificate(t *testing.T) {
|
|
dir := t.TempDir()
|
|
certPath := filepath.Join(dir, "ca.crt")
|
|
keyPath := filepath.Join(dir, "ca.key")
|
|
legacyCert, err := os.ReadFile(filepath.Join("testdata", "legacy_shared_ca.crt"))
|
|
if err != nil {
|
|
t.Fatalf("read legacy certificate fixture: %v", err)
|
|
}
|
|
if !isLegacySharedCA(legacyCert) {
|
|
t.Fatal("legacy certificate fixture fingerprint changed")
|
|
}
|
|
if err := os.WriteFile(certPath, legacyCert, 0o644); err != nil {
|
|
t.Fatalf("write legacy certificate: %v", err)
|
|
}
|
|
|
|
_, generatedCert, err := LoadOrCreateManager(certPath, keyPath)
|
|
if err != nil {
|
|
t.Fatalf("migrate legacy certificate: %v", err)
|
|
}
|
|
if bytes.Equal(legacyCert, generatedCert) || isLegacySharedCA(generatedCert) {
|
|
t.Fatal("legacy shared certificate was not replaced")
|
|
}
|
|
if _, err := os.Stat(keyPath); err != nil {
|
|
t.Fatalf("generated private key missing: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestNewManagerFromPEMRejectsMismatchedKey(t *testing.T) {
|
|
firstDir := t.TempDir()
|
|
secondDir := t.TempDir()
|
|
_, _, err := LoadOrCreateManager(filepath.Join(firstDir, "ca.crt"), filepath.Join(firstDir, "ca.key"))
|
|
if err != nil {
|
|
t.Fatalf("create first CA: %v", err)
|
|
}
|
|
_, _, err = LoadOrCreateManager(filepath.Join(secondDir, "ca.crt"), filepath.Join(secondDir, "ca.key"))
|
|
if err != nil {
|
|
t.Fatalf("create second CA: %v", err)
|
|
}
|
|
certPEM, _ := os.ReadFile(filepath.Join(firstDir, "ca.crt"))
|
|
keyPEM, _ := os.ReadFile(filepath.Join(secondDir, "ca.key"))
|
|
if _, err := NewManagerFromPEM(certPEM, keyPEM); err == nil {
|
|
t.Fatal("NewManagerFromPEM() accepted a mismatched private key")
|
|
}
|
|
}
|
|
|
|
func parseCertificatePEM(t *testing.T, certPEM []byte) *x509.Certificate {
|
|
t.Helper()
|
|
block, _ := pem.Decode(certPEM)
|
|
if block == nil {
|
|
t.Fatal("certificate PEM is invalid")
|
|
}
|
|
cert, err := x509.ParseCertificate(block.Bytes)
|
|
if err != nil {
|
|
t.Fatalf("parse certificate: %v", err)
|
|
}
|
|
return cert
|
|
}
|