// import tls "github.com/refraction-networking/utls"
tcpConn, err := net.Dial("tcp", "tlsfingerprint.io:443")
if err != nil {
fmt.Printf("net.Dial() failed: %+v\n", err)
return
}
config := tls.Config{ServerName: "tlsfingerprint.io"}
// This fingerprint includes feature(s), not fully supported by TLS.
// uTLS client with this fingerprint will only be able to to talk to servers,
// that also do not support those features.
tlsConn := tls.UClient(tcpConn, &tlsConfig, tls.HelloCustom)
clientHelloSpec := tls.ClientHelloSpec {
CipherSuites: []uint16{
0x006d,
0x00a7,
0xc046,
0xc05a,
0xc047,
0xc05b,
0x0046,
0x00bf,
0xc084,
0x0089,
0x00c5,
0xc085,
0x001a,
0x0018,
0x009b,
0xc0b2,
0xc0b0,
0xc0b3,
0xc0b1,
0xc008,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
0xc0ac,
0xc0ae,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
tls.DISABLED_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
0xc0ad,
0xc0af,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
0xc048,
0xc05c,
0xc049,
0xc05d,
0xc072,
0xc086,
0xc073,
0xc087,
tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
tls.OLD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
0xc006,
tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
0xc034,
0xc035,
0xc037,
0xd003,
0xd005,
0xd001,
0xc036,
0xc038,
0xd002,
0xc070,
0xc071,
0xc09a,
0xc09b,
0xccac,
0xc039,
0xc03a,
0xc03b,
0xc033,
tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
},
CompressionMethods: []byte{
0x00, // compressionNone
},
Extensions: []tls.TLSExtension{
code generation error: short sig_algs },
}
tlsConn.ApplyPreset(&clientHelloSpec)
n, err = tlsConn.Write([]byte("Hello, World!"))
// or tlsConn.Handshake() for better control