mic~ proxy for JA4-TLS fingerprinting evasion |
| git clone https://github.com/djnnvx/mic.git |
| log | files | refs | archive | README | LICENSE |
server.go (1856B)
1 package cmd 2 3 import ( 4 "errors" 5 "fmt" 6 "log" 7 8 "github.com/djnnvx/mic/fingerprint" 9 "github.com/djnnvx/mic/proxy" 10 "github.com/spf13/cobra" 11 ) 12 13 func newServerCmd() *cobra.Command { 14 var ( 15 listen string 16 backend string 17 fpName string 18 caPath string 19 cert string 20 key string 21 ) 22 23 cmd := &cobra.Command{ 24 Use: "server", 25 Short: "TLS termination proxy with upstream fingerprinting", 26 RunE: func(cmd *cobra.Command, args []string) error { 27 if backend == "" { 28 return errors.New("--backend is required for server mode") 29 } 30 if cert == "" || key == "" { 31 return errors.New("--cert and --key are required for server mode") 32 } 33 34 p := &proxy.Proxy{ 35 ListenAddr: listen, 36 BackendAddr: backend, 37 } 38 39 if caPath != "" { 40 pool, err := loadCAPool(caPath) 41 if err != nil { 42 return err 43 } 44 p.CAPool = pool 45 } 46 47 if fpName != "" { 48 fp, err := fingerprint.ByName(fpName) 49 if err != nil { 50 return fmt.Errorf("loading fingerprint: %w", err) 51 } 52 p.Fingerprint = fp 53 log.Printf("[+] Using TLS fingerprint: %s", fp.Name()) 54 } 55 56 handler, err := proxy.ServerFrontHandler(cert, key) 57 if err != nil { 58 return err 59 } 60 p.Handler = handler 61 62 log.Printf("[+] Mode: server (TLS termination → backend %s)", backend) 63 return p.Run() 64 }, 65 } 66 67 cmd.Flags().StringVarP(&listen, "listen", "l", ":8080", "listen address") 68 cmd.Flags().StringVarP(&backend, "backend", "b", "", "backend host:port (required)") 69 cmd.Flags().StringVarP(&fpName, "fingerprint", "f", "", "TLS fingerprint profile name (e.g. chrome-120)") 70 cmd.Flags().StringVar(&caPath, "ca", "", "path to upstream CA certificate") 71 cmd.Flags().StringVar(&cert, "cert", "", "TLS certificate for incoming termination (required)") 72 cmd.Flags().StringVar(&key, "key", "", "TLS key for incoming termination (required)") 73 74 return cmd 75 }