Golang TLS编程
发布时间:2020-12-16 19:16:06 所属栏目:大数据 来源:网络整理
导读:SSL/TLS的工作过程为: 在浏览器中输入HTTPS协议的网址,比如 https://exmail.qq.com/ 服务器向浏览器返回证书,浏览器检查该证书的合法性。 验证合法性 浏览器使用证书中的公钥加密一个随机对称密钥,并将加密后的密钥和使用密钥(对称密钥)加密后的请求UR
SSL/TLS的工作过程为:
下面是Golang socket编程中使用TLS示例代码。首先使用openssl生成私钥以及证书。
服务端: package main
import (
"bufio"
"crypto/tls"
"log"
"net"
)
func main() {
cert,err := tls.LoadX509KeyPair("server.pem","server.key")
if err != nil {
log.Println(err)
return
}
config := &tls.Config{Certificates: []tls.Certificate{cert}}
ln,err := tls.Listen("tcp","192.168.1.104:443",config)
if err != nil {
log.Println(err)
return
}
defer ln.Close()
for {
conn,err := ln.Accept()
if err != nil {
log.Println(err)
continue
}
go handleConn(conn)
}
}
func handleConn(conn net.Conn) {
defer conn.Close()
r := bufio.NewReader(conn)
for {
msg,err := r.ReadString('n')
if err != nil {
log.Println(err)
return
}
println(msg)
n,err := conn.Write([]byte("worldn"))
if err != nil {
log.Println(n,err)
return
}
}
}
客户端 package main
import (
"crypto/tls"
"log"
)
func main() {
conf := &tls.Config{
InsecureSkipVerify: true,}
conn,err := tls.Dial("tcp","127.0.0.1:443",conf)
if err != nil {
log.Println(err)
return
}
defer conn.Close()
n,err := conn.Write([]byte("hellon"))
if err != nil {
log.Println(n,err)
return
}
buf := make([]byte, 100)
n,err = conn.Read(buf)
if err != nil {
log.Println(n,err)
return
}
println(string(buf[:n]))
}
上面通信过程的抓包截图为,从抓包分析中可以看到数据是加密的: 参考: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Lua 类型与值(二)
- A easy example to tell you what is "2>&am
- Lua党看过来|Cocos Creator 即将支持Lua!
- FastMM、FastCode、FastMove的使用
- php – Laravel Testing – 与Mockery一起抛出异常
- Delphi w Indy 10:idHTTPRequest POST总是HTTP 1.0,如何使
- java – 没有autowire注释的Spring注入
- leecode 300. Longest Increasing Subsequence
- delphi – 如何将对象存储到磁盘?
- 大数据分析:是谁助长了P2P平台跑路