# Test server for generating TLS traffic in integration tests FROM golang:1.23-alpine WORKDIR /app # Create a simple TLS server for testing RUN cat > main.go << 'EOF' package main import ( "crypto/rand" "crypto/rsa" "crypto/tls" "crypto/x509" "crypto/x509/pkix" "encoding/pem" "flag" "fmt" "log" "math/big" "net" "net/http" "time" ) func main() { port := flag.String("port", "8443", "Port to listen on") flag.Parse() // Generate self-signed certificate cert, err := generateSelfSignedCert() if err != nil { log.Fatalf("Failed to generate certificate: %v", err) } config := &tls.Config{ Certificates: []tls.Certificate{cert}, MinVersion: tls.VersionTLS12, } listener, err := tls.Listen("tcp", ":"+*port, config) if err != nil { log.Fatalf("Failed to start TLS listener: %v", err) } defer listener.Close() log.Printf("TLS test server listening on port %s", *port) http.Serve(listener, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("Hello from TLS test server")) })) } func generateSelfSignedCert() (tls.Certificate, error) { // Generate private key priv, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { return tls.Certificate{}, err } // Create certificate template template := x509.Certificate{ SerialNumber: big.NewInt(1), Subject: pkix.Name{ Organization: []string{"JA4Sentinel Test"}, CommonName: "localhost", }, NotBefore: time.Now(), NotAfter: time.Now().Add(24 * time.Hour), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, BasicConstraintsValid: true, IPAddresses: []net.IP{net.IPv4(127, 0, 0, 1), net.IPv6loopback}, DNSNames: []string{"localhost"}, } // Create certificate certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv) if err != nil { return tls.Certificate{}, err } // Encode certificate certPEM := pem.EncodeToMemory(&pem.Block{ Type: "CERTIFICATE", Bytes: certDER, }) // Encode private key keyPEM := pem.EncodeToMemory(&pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv), }) // Load certificate return tls.X509KeyPair(certPEM, keyPEM) } EOF RUN go mod init test-server && go mod tidy EXPOSE 8443 CMD ["go", "run", "main.go", "-port", "8443"]