golang实现 golang写一个rpc框架
使用TLS可保障Golang RPC通信安全,服务端通过tls.Listen启用加密监听,客户端加载证书并建立安全连接,实现端到端加密传输。
在使用Golang实现RPC(远程调用过程)时,若需通信安全,通过TLS加密传输层来防止数据被窃取或篡改。下面是一个基于Go标准库网/rpc登录后复制登录后复制配合TLS的配置示例,主要服务端和客户端的实现。生成TLS证书
RPC使用TLS需要有效的证书文件。开发测试阶段可使用自签名证书:openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt -subj quot;/CN=localhostquot;登录后复制
该命令生成生成server.crt登录后复制(全局证书)和 server.key登录后复制(私钥),用于服务端启用HTTPS方式加密连接。
TLS 的 RPC 服务端
服务端通过 tls.Listen登录后复制创建安全监听,然后注册 RPC 对象并接受连接:
立即学习“go语言免费学习笔记(深入)”;package main
import ("crypto/tls""log""net""net/rpc")
type Args struct {A,B int}
type计算器 int
func (c 计算器) Multiply(args Args,reply int) error {reply = args.A args.Breturn nil}
func main() {cert, err := tls.LoadX509KeyPair("server.crt", "server.key")if err != nil {log.Fatal("无法加载证书:", err)}config := amp;tls.Config{Certificates: []tls.Certificate{cert}}listener, err := tls.Listen(quot;tcpquot;, quot;:8443quot;, config)if err != nil { log.Fatal(quot;启动 TLS 监听失败:quot;, err)}defer Listener.Close()rpc.Register(new(Calculator))log.Println(quot;RPC服务已启动,地址: quot;,listener.Addr())for { conn, err := Listener.Accept() if err != nil { log.Println(quot;接受连接失败:quot;, err) continue } go rpc.ServeConn(conn)}登录后复制
}启用TLS 的 RPC 客户端
客户端需要读取服务端证书(或 CA 证书),创建安全连接,并通过 rpc.NewClient登录后复制创建调用:Media.io AI Image Upscaler
Media.io推出的AI图片放大工具 39 查看详情 package main
import ("crypto/tls""crypto/x509""log"
"net/rpc")
func main() {cert, err := x509.LoadPEMFromFile("server.crt")if err != nil {log.Fatal("读取证书失败:", err)}rootCAs := x509.NewCertPool()rootCAs.AppendCertsFromPEM(cert)config := amp;tls.Config{RootCAs: rootCAs}conn, err := tls.Dial(quot;tcpquot;, quot;localhost:8443quot;, config)if err != nil { log.Fatal(quot;连接失败:quot;, err)}defer conn.Close()client := rpc.NewClient(conn)defer client.Close()args := Args{A: 7, B: 8}var 回复 interr = client.Call(quot;Calculator.Multiplyquot;, args, amp;reply)if err != nil { log.Fatal(quot;调用失败:quot;, err)}log.Printf(quot;结果: dquot;,reply)登录后复制
}关键注意事项
证书验证:生产环境应使用可信CA签名的证书,避免自签名带来的中间人风险。
主机名匹配:确保证书中的通用名称或SAN包含客户端连接的实际配置或IP。
连接复用:标准net/rpc登录后复制登录后不支持连接池,长连接建议自行占用或改用gRPC。
性能影响:TLS同步有一定的后续,高连场景建议启用同步复用或更考虑的协议(如gRPC结束) TLS。
基本上就这些。通过以上配置,Golang的RPC 通信即可实现端到端加密,满足基本的安全传输需求。
以上就是Golang安全通信TLS配置示例的详细内容,更多请关注乐哥常识网其他相关文章!改写节点Golang在Mac/Linux下配置Go工具链 Go语言中通过HTTP接收二进制数据实践指南