亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何確認來自 Go 客戶端的 gRPC 流量是 TLS 加密的

如何確認來自 Go 客戶端的 gRPC 流量是 TLS 加密的

Go
BIG陽 2022-06-27 17:28:09
我在 Go 中編寫了一個示例 gRPC 客戶端和服務器,兩者都配置為服務器身份驗證的 TLS??蛻舳?gRPC 調用成功,給我的印象是 TLS 配置正確,否則如果 TLS 握手失敗,我希望客戶端失敗并且不發出 gRPC 請求(即不默認為明文)。然而,當我將 Wireshark 連接到該網絡以嗅探 TCP 數據包時,我得到的結果讓我感到困惑。我沒有看到任何帶有 TLS 的數據包,例如我沒有看到 TLS CLIENT HELLO 數據包。這是因為我誤解了我在 Wireshark 中看到的內容,還是我的 gRPC 客戶端實際上在執行純文本 gRPC?客戶端代碼如下所示,請注意grpc.withTransportCredentials我認為這意味著它將使用 TLS 或失敗,但絕不是純文本:    // block the dial until connection is successful or 3 sec timeout    dialOptions := []grpc.DialOption{        grpc.WithBlock(),        grpc.WithTimeout(3 * time.Second),    }    // Load TLS Configuration    tlsCredentials, err := LoadTLSCredentials()    if err != nil {        log.Fatalf("Failed to load TLS credentials: %v", err)    }    dialOptions = append(dialOptions, grpc.WithTransportCredentials(tlsCredentials))    // Dial the gRPC server    log.Printf("Dialing %v", *address)    conn, err := grpc.Dial(*address, dialOptions...)    if err != nil {        log.Fatalf("Failed to connect to the server: %v", err)    }    defer conn.Close()    // then this application sets up a gRPC request, and logs the response to stdout,    // in my testing stdout shows the expected gRPC response, so I'd assume TLS is working.func LoadTLSCredentials() (credentials.TransportCredentials, error) {    rootCA, err := ioutil.ReadFile("ca.cert")    if err != nil {        return nil, err    }    certPool := x509.NewCertPool()    if !certPool.AppendCertsFromPEM(rootCA) {        return nil, fmt.Errorf("Failed to add rootCA to x509 certificate pool")    }    config := &tls.Config{        MinVersion: tls.VersionTLS12,        RootCAs: certPool,    }    return credentials.NewTLS(config), nil}這是 Wireshark 的屏幕截圖,沒有顯示 TLS 數據包而我希望類似于以下內容,清楚地顯示一些 TLS 活動(不是我的應用程序,圖片來自網絡,用于說明目的)我在 Ubuntu 16.04 上運行 Wireshark v2.6.10。源 IP 和目標 IP 與我的 gRPC 客戶端和服務器 IP 匹配(兩者都是同一 docker 網絡上的 docker 容器)。并不是說它真的很重要,但是從我的客戶端代碼中可以看出,我在客戶端上共享一個根 CA 證書(自簽名)。我可以這樣做,因為我同時部署了客戶端和服務器。
查看完整描述

2 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

您應該右鍵單擊數據包列表,然后選擇“解碼為..”菜單項,然后選擇“tls”以強制wireshark將此tcp端口中的流量解析為TLS。



查看完整回答
反對 回復 2022-06-27
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

正如@steffanUllrich 在評論中解釋的那樣,這是一個可以更好地配置 Wireshark 以顯示 TLS 的案例。我確認 gRPC 交換確實受 TLS 保護。



查看完整回答
反對 回復 2022-06-27
  • 2 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號