...
1 package websvr
2 import (
3 "crypto/tls"
4 "fmt"
5 "io/ioutil"
6 "log"
7 "net/http"
8 "testing"
9 "time"
10 "github.com/tjfoc/gmsm/x509"
11
12 "github.com/tjfoc/gmsm/gmtls"
13 )
14
15 const (
16
17
18 rsaCacertPath="certs/rsa_CA.cer"
19
20
21
22
23
24 sm2UserCertPath ="certs/sm2_auth_cert.cer"
25 sm2UserKeyPath= "certs/sm2_auth_key.pem"
26 )
27
28
29 func ServerRun() {
30
31
32 config, err := loadAutoSwitchConfig()
33
34 if err != nil {
35 panic(err)
36 }
37
38 ln, err := gmtls.Listen("tcp", ":50052", config)
39 if err != nil {
40 log.Println(err)
41 return
42 }
43 defer ln.Close()
44
45 http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
46 fmt.Fprintf(writer, "hello\n")
47 })
48 fmt.Println(">> HTTP Over [GMSSL/TLS] running...")
49 err = http.Serve(ln, nil)
50 if err != nil {
51 panic(err)
52 }
53 }
54 func ClientRun() {
55 var config = tls.Config{
56 MaxVersion: gmtls.VersionTLS12,
57 InsecureSkipVerify: true,
58 }
59 conn, err := tls.Dial("tcp", "localhost:50052", &config)
60 if err != nil {
61 panic(err)
62 }
63 defer conn.Close()
64
65 req := []byte("GET / HTTP/1.1\r\n" +
66 "Host: localhost\r\n" +
67 "Connection: close\r\n\r\n")
68 conn.Write(req)
69
70 buff := make([]byte, 1024)
71 for {
72 n, _ := conn.Read(buff)
73 if n <= 0 {
74 break
75 } else {
76 fmt.Printf("%s", buff[0:n])
77 }
78 }
79 fmt.Println()
80 end <- true
81 }
82 func gmClientRun() {
83
84
85 certPool := x509.NewCertPool()
86 cacert, err := ioutil.ReadFile(SM2CaCertPath)
87 if err != nil {
88 log.Fatal(err)
89 }
90 certPool.AppendCertsFromPEM(cacert)
91 cert, err := gmtls.LoadX509KeyPair(sm2UserCertPath, sm2UserKeyPath)
92
93 config := &gmtls.Config{
94 GMSupport: &gmtls.GMSupport{},
95 RootCAs: certPool,
96 Certificates: []gmtls.Certificate{cert},
97 }
98
99 conn, err := gmtls.Dial("tcp", "localhost:50052", config)
100 if err != nil {
101 panic(err)
102 }
103 defer conn.Close()
104
105 req := []byte("GET / HTTP/1.1\r\n" +
106 "Host: localhost\r\n" +
107 "Connection: close\r\n\r\n")
108 _, _ = conn.Write(req)
109 buff := make([]byte, 1024)
110 for {
111 n, _ := conn.Read(buff)
112 if n <= 0 {
113 break
114 } else {
115 fmt.Printf("%s", buff[0:n])
116 }
117 }
118 fmt.Println()
119 end <- true
120 }
121
122 var end chan bool
123
124 func Test_tls(t *testing.T) {
125 end = make(chan bool, 64)
126 go ServerRun()
127 time.Sleep(1000000)
128 go ClientRun()
129 <-end
130 go gmClientRun()
131 <-end
132 }
View as plain text