在Golang中,可以使用crypto/tls包实现SSL/TLS。代码示例:
go
// 创建自签名证书
cert, err := tls.X509KeyPair(certPEM, keyPEM)
if err != nil {
log.Fatal(err)
}
// 创建TLS配置
config := tls.Config{
Certificates: []tls.Certificate{cert},
}
// 实现HTTPS服务器
handler := http.NewServeMux()
server := http.Server{
Addr: ":443",
Handler: handler,
TLSConfig: &config,
}
log.Fatal(server.ListenAndServeTLS("", ""))
该示例创建自签名证书及TLS配置,并使用http.Server.TLSConfig实现HTTPS服务器。
go
// 实现客户端
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://localhost/")
客户端使用InsecureSkipVerify跳过证书校验,访问HTTPS服务器。
go
// Telnet服务器
listener, err := tls.Listen("tcp", ":23", &config)
if err != nil {
log.Fatal(err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal(err)
}
// ...
}
该示例实现了Telnet/TLS服务器。
go
// Telnet客户端
conn, err := tls.Dial("tcp", "localhost:23", &tls.Config{InsecureSkipVerify: true})
if err != nil {
log.Fatal(err)
}