// 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{
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
0x009f,
0xc0ad,
0xc09f,
tls.DISABLED_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
tls.DISABLED_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
0x006b,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
0x0039,
0xc0af,
0xc0a3,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
0x009e,
0xc0ac,
0xc09e,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
0x0067,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
0x0033,
0xc0ae,
0xc0a2,
0xc008,
tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
0x0016,
0x00ab,
0xc0a7,
0xc038,
0x00b3,
0xc036,
0x0091,
0xc0ab,
0x00aa,
0xc0a6,
0xc037,
0x00b2,
0xc035,
0x0090,
0xc0aa,
0xc034,
0x008f,
tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
0xc09d,
tls.DISABLED_TLS_RSA_WITH_AES_256_CBC_SHA256,
tls.TLS_RSA_WITH_AES_256_CBC_SHA,
0xc032,
0xc02a,
0xc00f,
0xc02e,
0xc026,
0xc005,
0xc0a1,
tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
0xc09c,
tls.TLS_RSA_WITH_AES_128_CBC_SHA256,
tls.TLS_RSA_WITH_AES_128_CBC_SHA,
0xc031,
0xc029,
0xc00e,
0xc02d,
0xc025,
0xc004,
0xc0a0,
tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
0xc00d,
0xc003,
0x00ad,
0x00b7,
0x0095,
0x00ac,
0x00b6,
0x0094,
0x0093,
0x00a9,
0xc0a5,
0x00af,
0x008d,
0xc0a9,
0x00a8,
0xc0a4,
0x00ae,
0x008c,
0xc0a8,
0x008b,
0x00ff,
},
CompressionMethods: []byte{
0x00, // compressionNone
},
Extensions: []tls.TLSExtension{
&tls.SNIExtension{},
&tls.SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []tls.SignatureScheme{
tls.ECDSAWithP521AndSHA512,
tls.PKCS1WithSHA512,
tls.ECDSAWithP384AndSHA384,
tls.PKCS1WithSHA384,
tls.ECDSAWithP256AndSHA256,
tls.PKCS1WithSHA256,
0x0303,
0x0301,
tls.ECDSAWithSHA1,
tls.PKCS1WithSHA1,
},},
&tls.SupportedCurvesExtension{[]tls.CurveID{
tls.CurveP521,
0x001c,
tls.CurveP384,
0x001b,
tls.CurveP256,
0x0016,
0x001a,
0x0015,
0x0014,
0x0013,
0x0012,
}},
&tls.SupportedPointsExtension{SupportedPoints: []byte{
0x00, // pointFormatUncompressed
}},
&tls.GenericExtension {Id: 0x0016}, // WARNING: UNKNOWN EXTENSION, USE AT YOUR OWN RISK
&tls.UtlsExtendedMasterSecretExtension{},
},
}
tlsConn.ApplyPreset(&clientHelloSpec)
n, err = tlsConn.Write([]byte("Hello, World!"))
// or tlsConn.Handshake() for better control