mic.git


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 }