我正在嘗試通過 Go 客戶端對(duì)自己進(jìn)行身份驗(yàn)證。這是我到目前為止所做的func main() { servAddr := "192.168.7.13:443" tcpAddr, err := net.ResolveTCPAddr("tcp", servAddr) if err != nil { fmt.Println("ResolveTCPAddr failed:", err.Error()) os.Exit(1) } conn, err := net.DialTCP("tcp", nil, tcpAddr) if err != nil { fmt.Println("Dial failed:", err.Error()) os.Exit(1) } _, err = conn.Write([]byte(postReq)) if err != nil { fmt.Println("Write to server failed:", err.Error()) os.Exit(1) } fmt.Println(postReq) reply := make([]byte, 1024) _, err = conn.Read(reply) if err != nil { fmt.Println("Write to server failed:", err.Error()) os.Exit(1) } fmt.Println("reply from server=", string(reply)) conn.Close()}這是我正在寫給連接的消息:POST /ManagementServer/ServerCommandService.svc HTTP/1.1 主機(jī):192.xxx.xx.xx 內(nèi)容類型:文本/xml;charset=utf-8 授權(quán):基本 {username:password in base64} Content-Length:405 SOAPAction:“ http://videoos.net/2/XProtectCSServerCommand/IServerCommandService/Login ” 連接:Keep-Alive 190fc316-6412-41c4- 8a9c-d468cc7bee9d在此之后,我希望獲得身份驗(yàn)證令牌,但我卻得到了> Write to server failed: read tcp server-ip:port->server-ip:443:> read: connection reset by peer我究竟做錯(cuò)了什么?僅供參考,我在 python 中使用相同的消息,并且通過套接字我可以獲得令牌。有人可以幫我在 Go 語言中做同樣的事情嗎?謝謝
1 回答

慕絲7291255
TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
從事實(shí)來看,您的服務(wù)器使用 port?443
,我假設(shè)服務(wù)器需要 TLS 連接。要獲得這樣的連接,您可以使用tls.Dial
:
conn,?err?:=?tls.Dial("tcp",?servAddr,?nil)?//?servAddr?not?tcpAddr
此連接將處理 TLS 加密所需的基礎(chǔ)步驟,例如 TLS 握手,并允許您Write
發(fā)送要發(fā)送的字節(jié),而不必自己進(jìn)行加密。
正如您提到的證書驗(yàn)證錯(cuò)誤,使用
conn,?err?:=?tls.Dial("tcp",?servAddr,?&tls.Config{InsecureSkipVerify:?true})
將禁用此驗(yàn)證。請注意,這會(huì)刪除 TLS 提供的大部分安全性。
請注意,我建議您使用它net/http
來發(fā)送簡單的 HTTP 請求。要在此處禁用證書驗(yàn)證,您可以使用
http.DefaultTransport.(*http.Transport).TLSClientConfig?=?&tls.Config{InsecureSkipVerify:?true}
但同樣要注意,這會(huì)消除 TLS 提供的大部分安全性。
- 1 回答
- 0 關(guān)注
- 182 瀏覽
添加回答
舉報(bào)
0/150
提交
取消