首页
关于我
Search
1
魔改comfy2go支持Https、wss以及Basic Auth
17 阅读
2
Navidrome 自建家庭音乐服务
11 阅读
3
Go实现密钥协商
9 阅读
4
雷池社区版通信机制优化
8 阅读
5
CF反代Docker镜像源,国内拉取Docker镜像
8 阅读
默认分类
Go
safeline
cloudflare
docker
HomeLab
登录
Search
标签搜索
safeline
密钥协商
typecho
comfyUI
go
闻道
累计撰写
7
篇文章
累计收到
1
条评论
首页
栏目
默认分类
Go
safeline
cloudflare
docker
HomeLab
页面
关于我
搜索到
1
篇与
的结果
2024-07-30
Go实现密钥协商
背景是为了解决服务之间通信加密,或想免除服务间鉴权但是又担心服务被恶意调用的问题.原理A 服务和 B 服务通过各自生成一对公钥和私钥,将各自的公钥发送给对方.A 服务通过 ECDH 算法传入 A 服务的私钥和 B 服务的公钥会协商出一个共享公钥 shareKey. 然后将 A 服务的公钥发送给 B 服务,B 服务同理也可协商出共享公钥.预期的结果是 AB 两个服务协商出的shareKey是一致的.后续 AB 服务使用这个key用来加密通信的内容.用各自的私钥进行解密.代码客户端 func ExchangeKey() error { curve := ecdh.P256() clientPri, _ := curve.GenerateKey(rand.Reader) clientPub := clientPri.PublicKey() der, _ := x509.MarshalPKIXPublicKey(clientPub) rlog.Info("post secret: ", der) serverDer, err := httpPostSecret(der) if err != nil { rlog.Error(err) return err } serverPub, err := x509.ParsePKIXPublicKey(serverDer) if err != nil { rlog.Error(err) return err } serverKey, _ := serverPub.(*ecdsa.PublicKey).ECDH() Secret, err = clientPri.ECDH(serverKey) if err != nil { rlog.Error(err) return err } rlog.Info("result secret: ", Secret) return nil } 服务端func ExchangeKey() ([]byte,error){ cpub, err := x509.ParsePKIXPublicKey(content) if err != nil { log.Error(err) return nil, err } ckey, err := cpub.(*ecdsa.PublicKey).ECDH() if err != nil { log.Error(err) return nil, err } spub, privateKey, err := ecdhkey() if err != nil { log.Error(err) return nil, err } secret, err := privateKey.ECDH(ckey) if err != nil { log.Error(err) return nil, err } Secret = secret return spub, nil }
2024年07月30日
9 阅读
0 评论
0 点赞