golang简单tls协议用法完整示例
本文实例讲述了golang简单tls协议用法。分享给大家供大家参考,具体如下:
生成私钥:
opensslgenrsa-outkey.pem2048
生成证书:
opensslreq-new-x509-keykey.pem-outcert.pem-days3650
https:
packagemain import( "io" "net/http" "log" ) funcHelloServer(whttp.ResponseWriter,req*http.Request){ io.WriteString(w,"hello,world!\n") } funcmain(){ http.HandleFunc("/hello",HelloServer) err:=http.ListenAndServeTLS(":8080","cert.pem","key.pem",nil) iferr!=nil{ log.Fatal("ListenAndServe:",err) } }
提示:访问请勿忘记使用https开头,否则chrome会下载一个文件如下:
dotcoo-air:tlsdotcoo$cat/Users/dotcoo/Downloads/hello|xxd
0000000:1503010002020a .......
TLSServer:
packagemain import( "log" "crypto/tls" "net" "bufio" ) funcmain(){ log.SetFlags(log.Lshortfile) cer,err:=tls.LoadX509KeyPair("cert.pem","key.pem") iferr!=nil{ log.Println(err) return } config:=&tls.Config{Certificates:[]tls.Certificate{cer}} ln,err:=tls.Listen("tcp",":8000",config) iferr!=nil{ log.Println(err) return } deferln.Close() for{ conn,err:=ln.Accept() iferr!=nil{ log.Println(err) continue } gohandleConnection(conn) } } funchandleConnection(connnet.Conn){ deferconn.Close() r:=bufio.NewReader(conn) for{ msg,err:=r.ReadString('\n') iferr!=nil{ log.Println(err) return } println(msg) n,err:=conn.Write([]byte("world\n")) iferr!=nil{ log.Println(n,err) return } } }
TLSClient:
packagemain import( "log" "crypto/tls" ) funcmain(){ log.SetFlags(log.Lshortfile) conf:=&tls.Config{ InsecureSkipVerify:true, } conn,err:=tls.Dial("tcp","127.0.0.1:8000",conf) iferr!=nil{ log.Println(err) return } deferconn.Close() n,err:=conn.Write([]byte("hello\n")) iferr!=nil{ log.Println(n,err) return } buf:=make([]byte,100) n,err=conn.Read(buf) iferr!=nil{ log.Println(n,err) return } println(string(buf[:n])) }
希望本文所述对大家Go语言程序设计有所帮助。