mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-31 03:56:20 +08:00
53 lines
981 B
Go
53 lines
981 B
Go
package tlsLayer
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"net"
|
|
"unsafe"
|
|
|
|
"github.com/hahahrfool/v2ray_simple/utils"
|
|
)
|
|
|
|
type Server struct {
|
|
tlsConfig *tls.Config
|
|
}
|
|
|
|
//如 certFile, keyFile 有一项没给出,则会自动生成随机证书
|
|
func NewServer(host, certFile, keyFile string, isInsecure bool, alpnList []string) (*Server, error) {
|
|
|
|
certArray, err := GetCertArrayFromFile(certFile, keyFile)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s := &Server{
|
|
tlsConfig: &tls.Config{
|
|
InsecureSkipVerify: isInsecure,
|
|
ServerName: host,
|
|
Certificates: certArray,
|
|
NextProtos: alpnList,
|
|
},
|
|
}
|
|
|
|
return s, nil
|
|
}
|
|
|
|
func (s *Server) Handshake(underlay net.Conn) (tlsConn *Conn, err error) {
|
|
rawTlsConn := tls.Server(underlay, s.tlsConfig)
|
|
err = rawTlsConn.Handshake()
|
|
if err != nil {
|
|
err = utils.ErrInErr{ErrDesc: "tlsLayer: tls握手失败", ErrDetail: err}
|
|
|
|
return
|
|
}
|
|
|
|
tlsConn = &Conn{
|
|
Conn: rawTlsConn,
|
|
ptr: unsafe.Pointer(rawTlsConn),
|
|
}
|
|
|
|
return
|
|
|
|
}
|