簡體   English   中英

Golang - TLS 握手錯誤

[英]Golang - TLS handshake error

我正在運行一個 https Web 服務器。 我正在使用對 Web 服務器進行 ajax 調用的角度 Web 應用程序(Chrome 瀏覽器)對其進行測試。

如果我不斷地訪問網絡服務器,一切似乎都正常。 但是每當我讓它閑置一段時間並訪問 Web 服務器時,來自瀏覽器的 ajax 調用就不會得到響應。 我幾乎總是在我的服務器日志中看到這個日志行。

2016/01/16 04:06:47.006977 http: TLS handshake error from 42.21.139.47:51463: EOF

我可以確認IP地址是我的IP地址。

我正在這樣啟動我的 https 服務器:

r := mux.NewRouter()
r.HandleFunc("/status", handleStatus)
setUpLoginEndpoint(&cfg.Session, r)
setUpLogoutEndpoint(cfg.Session.CookieName, r)
setUpChangePasswordEndpoint(cfg.Session.CookieName, r)
setUpMetricSinkEndpoint(cfg.Metric.SinkApiKey, r)
setUpMetricQueryEndpoint(cfg.Session.CookieName, r)
http.ListenAndServeTLS(":443", "../cert.pem", "../keys.pem", &Server{r})

我可以確認我正在使用 defer r.Body.Close() 關閉每個處理程序中的請求主體。

我正在使用 1.5.2。

任何幫助,將不勝感激。

問候,

沙迪亞

我啟用了 tcp keepalive,這個問題就解決了。 我在谷歌計算引擎中運行我的虛擬機,可能是防火牆終止了空閑連接。

TCP保持活躍

在linux中配置tcp keep alive

Golang http 服務器自動拾取它,因此我的 golang 代碼不需要更改。

問候,

沙迪亞

我收到了與 OP 相同的錯誤,但就我而言,我指定的 TLSHandshakeTimeout 值太低。 我不確定什么是合適的值,但將它從 100 毫秒移至 700 毫秒消除了我的錯誤。 對於遇到相同錯誤並且在其 http.Client 設置中指定非默認 http.Transport 配置值的其他人,您可能需要確保將 TLSHandshakeTimeout 設置為足夠高的值。

&http.Client{
  Transport: &http.Transport{
    TLSHandshakeTimeout:   700 * time.Millisecond, //<-- I was receiving OP's error when I had this set to 100ms
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM