tcpx icon indicating copy to clipboard operation
tcpx copied to clipboard

[Promotion] Enable tls

Open fwhezfwhez opened this issue 4 years ago • 0 comments

Hello, tcpx now support tls for your server.Know that:

  • If you want to suport tls using ISP commercial solution, then you don't actually need this functional promotion.
  • If you got correct pem pair of key.pem and cert.pem, or you want a self-built,unauthorized certification and generate key.pem and cert.pem by command openssl genrsa > key.pem openssl req -new -x509 -key key.pem > cert.pem, then this promotion is just for it

Example:

package main

import (
	"fmt"
	"github.com/fwhezfwhez/tcpx"
)

func main() {
	r := tcpx.NewTcpX(nil)
	r.Any("/login/", func(c *tcpx.Context) {
		fmt.Printf("recv a login")
	})

	// TODO You might modify here to locate your pem files' real path
	var certPath = "G:\\go_workspace\\GOPATH\\src\\tcpx\\examples\\modules\\tls\\pem\\cert.pem"
	var keyPath = "G:\\go_workspace\\GOPATH\\src\\tcpx\\examples\\modules\\tls\\pem\\key.pem"

	//var pemPath = "G:\\go_workspace\\GOPATH\\src\\github.com\\fwhezfwhez\\tcpx\\examples\\modules\\tls\\pem"
	if e := r.LoadTLSFile(certPath, keyPath); e != nil {
		panic(e)
	}

	if e := r.ListenAndServe("tcp", ":8080"); e != nil {
		panic(e)
	}
}

Client example:

package main

import (
	"crypto/tls"
	"crypto/x509"
	"github.com/fwhezfwhez/tcpx"
)

func main() {
	// Connecting with a custom root-certificate set.
	// All tls shares a same rootPEM
	const rootPEM = `
-----BEGIN CERTIFICATE-----
MIIEBDCCAuygAwIBAgIDAjppMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
YWwgQ0EwHhcNMTMwNDA1MTUxNTU1WhcNMTUwNDA0MTUxNTU1WjBJMQswCQYDVQQG
EwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy
bmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP
VaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv
h8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE
ahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ
EASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC
DTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB+zCB+DAfBgNVHSMEGDAWgBTAephojYn7
qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wEgYD
VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMwMTAvoC2g
K4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwPQYI
KwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vZ3RnbG9iYWwtb2NzcC5n
ZW90cnVzdC5jb20wFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEB
BQUAA4IBAQA21waAESetKhSbOHezI6B1WLuxfoNCunLaHtiONgaX4PCVOzf9G0JY
/iLIa704XtE7JW4S615ndkZAkNoUyHgN7ZVm2o6Gb4ChulYylYbc3GrKBIxbf/a/
zG+FA1jDaFETzf3I93k9mTXwVqO94FntT0QJo544evZG0R0SnU++0ED8Vf4GXjza
HFa9llF7b1cq26KqltyMdMKVvvBulRP/F/A8rLIQjcxz++iPAsbw+zOzlTvjwsto
WHPbqCRiOwY1nQ2pM714A5AuTHhdUDqB1O6gyHA43LL5Z/qHQF1hwFGPa4NrzQU6
yuGnBXj8ytqU0CwIPX4WecigUCAkVDNx
-----END CERTIFICATE-----`

	// First, create the set of root certificates. For this example we only
	// have one. It's also possible to omit this in order to use the
	// default root set of the current operating system.
	roots := x509.NewCertPool()
	ok := roots.AppendCertsFromPEM([]byte(rootPEM))
	if !ok {
		panic("failed to parse root certificate")
	}
	conn, err := tls.Dial("tcp", "localhost:8080", &tls.Config{
		RootCAs:            roots,
		InsecureSkipVerify: true, // If you make your server side certification yourself, you should set this field true to skip verify.
	})
	if err != nil {
		panic("failed to connect: " + err.Error())
	}
	defer conn.Close()
	msg := tcpx.NewURLPatternMessage("/login/", nil)
	buf, e := msg.Pack(nil)

	if e != nil {
		panic(e)
	}
	conn.Write(buf)
}

fwhezfwhez avatar Feb 08 '21 05:02 fwhezfwhez