mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 09:28:14 +00:00
fix(remotedevice): WS 握手 Accept 改用 SHA-1(RFC6455 合规)
wsAccept 误用 sha256 计算 Sec-WebSocket-Accept,RFC6455 §4.2.2 规定 必须为 base64(SHA1(key + GUID))。后果:所有标准 WS 客户端(浏览器/ Electron/各语言标准库)校验 Accept 失败后立即断开连接,设备永远无法 完成 hello 注册——devicedetect 恒返回空列表,核心看不到任何设备, 而设备端本地授权状态正常,形成'已授权但核心看不见'的表象。 验证:openssl sha1 对照 + 干净实例端到端握手 Accept 完全一致。
This commit is contained in:
@ -2,7 +2,7 @@ package remotedevice
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"crypto/sha256"
|
||||
"crypto/sha1" // RFC6455 规定 Sec-WebSocket-Accept 必须用 SHA-1,勿改
|
||||
"encoding/base64"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
@ -372,8 +372,12 @@ func (r *Registry) deliverResult(reqID string, res map[string]interface{}) {
|
||||
|
||||
const wsGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
|
||||
|
||||
// wsAccept 计算 RFC6455 §4.2.2 握手响应值:base64(SHA1(key + GUID))。
|
||||
// 注意必须用 SHA-1——这是协议规定而非安全选择;此前误用 SHA-256 导致
|
||||
// 所有标准 WS 客户端(浏览器/Electron/各语言标准库)校验 Accept 失败
|
||||
// 后立即断开,设备永远无法完成 hello 注册(devicedetect 恒为空)。
|
||||
func wsAccept(key string) string {
|
||||
h := sha256.Sum256([]byte(key + wsGUID))
|
||||
h := sha1.Sum([]byte(key + wsGUID))
|
||||
return base64.StdEncoding.EncodeToString(h[:])
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user