使用Go实现TLS服务器和客户端需要以下步骤:
- 生成证书和私钥文件
TLS服务器和客户端都需要证书文件和私钥文件来实现加密通信。可以使用OpenSSL工具生成证书和私钥文件。
# 生成私钥文件
$ openssl genrsa -out server.key 2048
# 生成证书签发请求文件
$ openssl req -new -key server.key -out server.csr
# 自签发证书
$ openssl x509 -req -in server.csr -signkey server.key -out server.crt
# 生成客户端私钥文件
$ openssl genrsa -out client.key 2048
# 生成证书签发请求文件
$ openssl req -new -key client.key -out client.csr
# 自签发证书
$ openssl x509 -req -in client.csr -signkey client.key -out client.crt
- 服务器端代码
TLS服务器端配置需要加载证书和私钥文件,并监听指定的端口。
package main
import (
"crypto/tls"
"fmt"
"net/http"
)
func main() {
// 加载服务器证书和私钥
cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
if err != nil {
panic(err)
}
// 配置TLS参数
config := &tls.Config{Certificates: []tls.Certificate{cert}}
// 启动TLS服务器
server := &http.Server{
Addr: ":8080",
TLSConfig: config,
}
err = server.ListenAndServeTLS("", "")
if err != nil {
panic(err)
}
}
启动服务器后,通过浏览器访问https://localhost:8080
即可。
- 客户端代码
TLS客户端需要加载证书文件,并与TLS服务器建立加密连接。
package main
import (
"crypto/tls"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 创建TLS客户端配置
caCert, err := ioutil.ReadFile("server.crt")
if err != nil {
panic(err)
}
pool := x509.NewCertPool()
pool.AppendCertsFromPEM(caCert)
config := &tls.Config{
RootCAs: pool,
}
// 创建TLS客户端连接
tr := &http.Transport{
TLSClientConfig: config,
}
client := &http.Client{Transport: tr}
// 与TLS服务器建立连接
resp, err := client.Get("https://localhost:8080")
if err != nil {
panic(err)
}
// 读取响应内容
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
通过运行客户端代码,可以与TLS服务器建立加密连接,并读取服务器响应。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Go实现TLS服务器和客户端的示例 - Python技术站