mic~ proxy for JA4-TLS fingerprinting evasion |
| git clone https://github.com/djnnvx/mic.git |
| log | files | refs | archive | README | LICENSE |
serverfront.go (1020B)
1 package proxy 2 3 import ( 4 "crypto/tls" 5 "fmt" 6 "log" 7 "net" 8 ) 9 10 // ServerFrontHandler returns a Handler that terminates incoming TLS using certFile/keyFile, 11 // then forwards to p.BackendAddr using the configured fingerprint. 12 func ServerFrontHandler(certFile, keyFile string) (Handler, error) { 13 cert, err := tls.LoadX509KeyPair(certFile, keyFile) 14 if err != nil { 15 return nil, fmt.Errorf("ServerFrontHandler: loading certificate: %w", err) 16 } 17 18 tlsCfg := &tls.Config{ 19 Certificates: []tls.Certificate{cert}, 20 } 21 22 return func(clientConn net.Conn, p *Proxy) { 23 defer clientConn.Close() 24 25 tlsConn := tls.Server(clientConn, tlsCfg) 26 if err := tlsConn.Handshake(); err != nil { 27 log.Printf("ServerFront: TLS handshake with client failed: %v", err) 28 return 29 } 30 defer tlsConn.Close() 31 32 targetConn, err := p.dialTarget(p.BackendAddr) 33 if err != nil { 34 log.Printf("ServerFront: failed to connect to backend %s: %v", p.BackendAddr, err) 35 return 36 } 37 defer targetConn.Close() 38 39 pipe(tlsConn, targetConn) 40 }, nil 41 }