mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
tls: optimized code
This commit is contained in:
parent
d37c2e2a35
commit
25c9721b00
@ -116,7 +116,7 @@ func (s *RedirProxy) ListenAndServe() {
|
|||||||
|
|
||||||
// Serve .
|
// Serve .
|
||||||
func (s *RedirProxy) Serve(c net.Conn) {
|
func (s *RedirProxy) Serve(c net.Conn) {
|
||||||
|
log.F("[redir] func Serve: can not be called directly")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the original destination of a TCP connection.
|
// Get the original destination of a TCP connection.
|
||||||
|
@ -17,11 +17,14 @@ type TLS struct {
|
|||||||
dialer proxy.Dialer
|
dialer proxy.Dialer
|
||||||
addr string
|
addr string
|
||||||
|
|
||||||
|
tlsConfig *stdtls.Config
|
||||||
|
|
||||||
serverName string
|
serverName string
|
||||||
skipVerify bool
|
skipVerify bool
|
||||||
|
|
||||||
certFile string
|
certFile string
|
||||||
keyFile string
|
keyFile string
|
||||||
|
cert stdtls.Certificate
|
||||||
|
|
||||||
server proxy.Server
|
server proxy.Server
|
||||||
}
|
}
|
||||||
@ -69,7 +72,20 @@ func NewTLS(s string, dialer proxy.Dialer) (*TLS, error) {
|
|||||||
|
|
||||||
// NewTLSDialer returns a tls proxy dialer.
|
// NewTLSDialer returns a tls proxy dialer.
|
||||||
func NewTLSDialer(s string, dialer proxy.Dialer) (proxy.Dialer, error) {
|
func NewTLSDialer(s string, dialer proxy.Dialer) (proxy.Dialer, error) {
|
||||||
return NewTLS(s, dialer)
|
p, err := NewTLS(s, dialer)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
p.tlsConfig = &stdtls.Config{
|
||||||
|
ServerName: p.serverName,
|
||||||
|
InsecureSkipVerify: p.skipVerify,
|
||||||
|
ClientSessionCache: stdtls.NewLRUClientSessionCache(64),
|
||||||
|
MinVersion: stdtls.VersionTLS10,
|
||||||
|
MaxVersion: stdtls.VersionTLS12,
|
||||||
|
}
|
||||||
|
|
||||||
|
return p, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTLSServer returns a tls transport layer before the real server
|
// NewTLSServer returns a tls transport layer before the real server
|
||||||
@ -89,6 +105,18 @@ func NewTLSServer(s string, dialer proxy.Dialer) (proxy.Server, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cert, err := stdtls.LoadX509KeyPair(p.certFile, p.keyFile)
|
||||||
|
if err != nil {
|
||||||
|
log.F("[tls] unabled load cert: %s, key %s", p.certFile, p.keyFile)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
p.tlsConfig = &stdtls.Config{
|
||||||
|
Certificates: []stdtls.Certificate{cert},
|
||||||
|
MinVersion: stdtls.VersionTLS10,
|
||||||
|
MaxVersion: stdtls.VersionTLS12,
|
||||||
|
}
|
||||||
|
|
||||||
p.server, err = proxy.ServerFromURL(transport[1], dialer)
|
p.server, err = proxy.ServerFromURL(transport[1], dialer)
|
||||||
|
|
||||||
return p, err
|
return p, err
|
||||||
@ -96,19 +124,7 @@ func NewTLSServer(s string, dialer proxy.Dialer) (proxy.Server, error) {
|
|||||||
|
|
||||||
// ListenAndServe .
|
// ListenAndServe .
|
||||||
func (s *TLS) ListenAndServe() {
|
func (s *TLS) ListenAndServe() {
|
||||||
cert, err := stdtls.LoadX509KeyPair(s.certFile, s.keyFile)
|
l, err := net.Listen("tcp", s.addr)
|
||||||
if err != nil {
|
|
||||||
log.F("[tls] unabled load cert: %s, key %s", s.certFile, s.keyFile)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
tlsConfig := &stdtls.Config{
|
|
||||||
Certificates: []stdtls.Certificate{cert},
|
|
||||||
MinVersion: stdtls.VersionTLS10,
|
|
||||||
MaxVersion: stdtls.VersionTLS12,
|
|
||||||
}
|
|
||||||
|
|
||||||
l, err := stdtls.Listen("tcp", s.addr, tlsConfig)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[tls] failed to listen on tls %s: %v", s.addr, err)
|
log.F("[tls] failed to listen on tls %s: %v", s.addr, err)
|
||||||
return
|
return
|
||||||
@ -130,8 +146,10 @@ func (s *TLS) ListenAndServe() {
|
|||||||
|
|
||||||
// Serve .
|
// Serve .
|
||||||
func (s *TLS) Serve(c net.Conn) {
|
func (s *TLS) Serve(c net.Conn) {
|
||||||
// TODO: check here
|
if s.server != nil {
|
||||||
s.server.Serve(c)
|
cc := stdtls.Server(c, s.tlsConfig)
|
||||||
|
s.server.Serve(cc)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Addr returns forwarder's address
|
// Addr returns forwarder's address
|
||||||
@ -148,15 +166,7 @@ func (s *TLS) Dial(network, addr string) (net.Conn, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
conf := &stdtls.Config{
|
c := stdtls.Client(cc, s.tlsConfig)
|
||||||
ServerName: s.serverName,
|
|
||||||
InsecureSkipVerify: s.skipVerify,
|
|
||||||
ClientSessionCache: stdtls.NewLRUClientSessionCache(64),
|
|
||||||
MinVersion: stdtls.VersionTLS10,
|
|
||||||
MaxVersion: stdtls.VersionTLS12,
|
|
||||||
}
|
|
||||||
|
|
||||||
c := stdtls.Client(cc, conf)
|
|
||||||
err = c.Handshake()
|
err = c.Handshake()
|
||||||
return c, err
|
return c, err
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,9 @@ func (s *TProxy) ListenAndServeUDP() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Serve .
|
// Serve .
|
||||||
func (s *TProxy) Serve(c net.Conn) {}
|
func (s *TProxy) Serve(c net.Conn) {
|
||||||
|
log.F("[tproxy] func Serve: can not be called directly")
|
||||||
|
}
|
||||||
|
|
||||||
// ReadFromUDP reads a UDP packet from c, copying the payload into b.
|
// ReadFromUDP reads a UDP packet from c, copying the payload into b.
|
||||||
// It returns the number of bytes copied into b and the return address
|
// It returns the number of bytes copied into b and the return address
|
||||||
|
@ -107,5 +107,5 @@ func (s *UDPTun) ListenAndServe() {
|
|||||||
|
|
||||||
// Serve .
|
// Serve .
|
||||||
func (s *UDPTun) Serve(c net.Conn) {
|
func (s *UDPTun) Serve(c net.Conn) {
|
||||||
|
log.F("[udptun] func Serve: can not be called directly")
|
||||||
}
|
}
|
||||||
|
@ -106,5 +106,5 @@ func (s *UoTTun) ListenAndServe() {
|
|||||||
// Serve .
|
// Serve .
|
||||||
func (s *UoTTun) Serve(c net.Conn) {
|
func (s *UoTTun) Serve(c net.Conn) {
|
||||||
// TODO
|
// TODO
|
||||||
|
log.F("[uottun] func Serve: can not be called directly")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user