Golang中如何实现SSL/TLS?代码举例讲解

在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)
}