...

Source file src/github.com/tjfoc/gmsm/gmtls/websvr/websvr_test.go

Documentation: github.com/tjfoc/gmsm/gmtls/websvr

     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  	// rsaCertPath = "certs/rsa_sign.cer"
    17  	// rsaKeyPath  = "certs/rsa_sign_key.pem"
    18      rsaCacertPath="certs/rsa_CA.cer"
    19  	// sm2SignCertPath = "certs/sm2_sign_cert.cer"
    20  	// sm2SignKeyPath  = "certs/sm2_sign_key.pem"
    21  	// sm2EncCertPath  = "certs/sm2_enc_cert.cer"
    22  	// sm2EncKeyPath   = "certs/sm2_enc_key.pem"
    23  	// SM2CaCertPath   = "certs/SM2_CA.cer"
    24  	sm2UserCertPath ="certs/sm2_auth_cert.cer"
    25  	sm2UserKeyPath= "certs/sm2_auth_key.pem"
    26  )
    27  
    28  
    29  func ServerRun() {
    30  	//config, err := loadRsaConfig()
    31  	//config, err := loadSM2Config()
    32  	config, err := loadAutoSwitchConfig()
    33  	//config, err:=loadAutoSwitchConfigClientAuth()
    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