xml - 尝试对服务器进行身份验证时由对等方重置连接
问题描述
我正在尝试通过 Go 客户端对自己进行身份验证。这是我到目前为止所做的
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 主机:192.xxx.xx.xx 内容类型:text/xml;charset=utf-8 授权:基本 {username:password in base64} 内容长度:405 SOAPAction:“ http://videoos.net/2/XProtectCSServerCommand/IServerCommandService/Login ”连接:Keep-Alive 190fc316-6412-41c4- 8a9c-d468cc7bee9d
在此之后,我希望获得一个身份验证令牌,但我得到了一个
> Write to server failed: read tcp server-ip:port->server-ip:443:
> read: connection reset by peer
我究竟做错了什么?仅供参考,我在 python 中使用相同的消息,并且通过套接字我可以获得令牌。有人可以帮我在 Go lang 中做同样的事情吗?谢谢
解决方案
从您的服务器使用 port 的事实来看443
,我假设服务器需要 TLS 连接。要获得这样的连接,您可以使用tls.Dial
:
conn, err := tls.Dial("tcp", servAddr, nil) // servAddr not tcpAddr
此连接将处理 TLS 加密所需的基础步骤,例如 TLS 握手,并允许您Write
发送要发送的字节,而不必自己进行加密。
正如您提到的证书验证错误,使用
conn, err := tls.Dial("tcp", servAddr, &tls.Config{InsecureSkipVerify: true})
将禁用此验证。请注意,这会删除 TLS 提供的大部分安全性。
请注意,我建议您使用它net/http
来发送简单的 HTTP 请求。要在此处禁用证书验证,您可以使用
http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
但同样,请注意,这会删除 TLS 提供的大部分安全性。您可以查看此答案以获取有关使用禁用此请求发送的更多详细信息net.http
。
推荐阅读
- c++ - 如果从脚本运行应用程序,则在 linux 中使用 GDB
- python - 如何使用第三倍频程(1/3)频带中心频率而不是python中的默认窄带绘制音频文件的频谱图?
- c - 如何只显示一次消息?
- c - 为什么在无法访问时我仍然可以访问内存
- python - 消费者无法消费来自生产者的所有消息
- javascript - 歌剧浏览器上未调用 webrtc onicecandidate
- javascript - 如何使用 React.lazy 导入 Material UI 图标?
- python - 在 OpenGL 的 Python 包装器中获取缓冲区的值
- node.js - 使用在 Expo 中使用加密的第三方 npm 库
- javascript - 检测点击反应父组件外部