我正在嘗試除錯與給定主機的失敗連接。我記錄了通過瀏覽器向該主機發出的成功請求的資料包捕獲,以及通過下面的 Go 代碼發出的不成功請求的資料包捕獲:
package main
import (
"crypto/tls"
"log"
)
func main() {
log.SetFlags(log.Lshortfile)
conf := &tls.Config{
//InsecureSkipVerify: true,
MinVersion: tls.VersionTLS13,
MaxVersion: tls.VersionTLS13,
}
conn, err := tls.Dial("tcp", "x.x.x.x:443", conf)
if err != nil {
log.Println(err)
return
}
defer conn.Close()
n, err := conn.Write([]byte("hello\n"))
if err != nil {
log.Println(n, err)
return
}
buf := make([]byte, 100)
n, err = conn.Read(buf)
if err != nil {
log.Println(n, err)
return
}
println(string(buf[:n]))
}
在檢查成功和不成功請求中的 Client Hello 資料包后,我注意到成功的請求使用 TLSv1.3,而不成功的請求使用 TLSv1.2。
我上面的代碼指定我只想在我的請求中使用 TLSv1.3,但無論出于何種原因,請求仍然嘗試使用 TLSv1.2。我已經嘗試咨詢用 go 撰寫的各種示例 http 客戶端,并確認我使用的是正確的語法。任何想法我在這里做錯了什么?
uj5u.com熱心網友回復:
TLS 1.3 握手也
如果我們在 golang 代碼中指定 TLS 1.3,在supported_versions擴展中只有一個TLS 1.3

如果服務器不支持 TLS 1.3 或任何其他原因,連接在握手階段失敗,看起來像一個失敗的 TLS 1.2 連接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343550.html
上一篇:使用Go將復雜的httpjson回應陣列轉換為簡單的結構切片,而無需創建多個結構來匹配回應
下一篇:Go中的介面實作實施
