第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在 Go 中提取 TLS 機密

在 Go 中提取 TLS 機密

Go
Qyouu 2022-12-26 10:41:51
我不確定這是否真的是 Wireshark、Go 或 Syncthing 的問題;我嘗試了 Wireshark dev list和Go dev list但沒有得到回應,所以我想我會在這里嘗試:我正在研究Wireshark Syncthing 解剖器。由于大多數(shù) Syncthing 協(xié)議都封裝在 TLS 中,因此我需要向 Wireshark 提供 TLS 機密。我閱讀了 Wireshark TLS 文檔;Syncthing 是用 Go 編寫的,所以我修補它以導出 TLS secrets,就像這樣(這只是 Syncthing 上游代碼加上最后兩行):// The TLS configuration is used for both the listening socket and outgoing// connections.var tlsCfg *tls.Configif a.cfg.Options().InsecureAllowOldTLSVersions {    l.Infoln("TLS 1.2 is allowed on sync connections. This is less than optimally secure.")    tlsCfg = tlsutil.SecureDefaultWithTLS12()} else {    tlsCfg = tlsutil.SecureDefaultTLS13()}tlsCfg.Certificates = []tls.Certificate{a.cert}tlsCfg.NextProtos = []string{bepProtocolName}tlsCfg.ClientAuth = tls.RequestClientCerttlsCfg.SessionTicketsDisabled = truetlsCfg.InsecureSkipVerify = true// The following two lines open a file in the current directory and configure the application to dump its TLS secrets there// See: https://pkg.go.dev/crypto/tls#example-Config-KeyLogWriterw, err := os.OpenFile("tls-secrets.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)tlsCfg.KeyLogWriter = w這有效,并且各種內(nèi)容被寫入指定的文件,但是將該文件提供給 Wireshark 不會啟用 TLS 解密。我檢查了該文件,發(fā)現(xiàn)它包含CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0和SERVER_TRAFFIC_SECRET_0行,但不包含關(guān)鍵CLIENT_RANDOM行。我做錯了什么或遺漏了什么嗎?
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經(jīng)驗 獲得超8個贊

根本原因是和之間的差異tls1.2,tls1.3差異可以在這里找到

http://img1.sycdn.imooc.com//63a90a190001d24606950506.jpg

每個 golang tls 代碼


    keyLogLabelTLS12           = "CLIENT_RANDOM"

    keyLogLabelClientHandshake = "CLIENT_HANDSHAKE_TRAFFIC_SECRET"

    keyLogLabelServerHandshake = "SERVER_HANDSHAKE_TRAFFIC_SECRET"

    keyLogLabelClientTraffic   = "CLIENT_TRAFFIC_SECRET_0"

    keyLogLabelServerTraffic   = "SERVER_TRAFFIC_SECRET_0"

對于tls1.3,那些參數(shù)CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0和SERVER_TRAFFIC_SECRET_0 可以導出為客戶端機密

對于tls1.2,CLIENT_RANDOM可以導出為客戶端機密

所有這些都可以在 Wireshark 中用于解密 TLS1.2 和 TLS 1.3。


這是一個測試樣本


首先,啟動一個HTTPS服務器


    mux := http.NewServeMux()

    mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {

        if req.URL.Path != "/" {

            http.NotFound(w, req)

            return

        }

    })


    w, err := os.OpenFile("/keypath/https-key.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)

    if err != nil {

        fmt.Printf("failed to open file err %+v", err)

        return

    }


    cs := make([]uint16, len(cipherSuites))

    copy(cs, cipherSuites)

    var tlsCfg tls.Config

    tlsCfg.Certificates = make([]tls.Certificate, 1)

    tlsCfg.Certificates[0], err = tls.LoadX509KeyPair(*certFile, *keyFile)

    tlsCfg.NextProtos = []string{"h2"}

    tlsCfg.ClientAuth = tls.RequestClientCert

    tlsCfg.SessionTicketsDisabled = true

    tlsCfg.InsecureSkipVerify = true

    tlsCfg.KeyLogWriter = w

    tlsCfg.MinVersion = tls.VersionTLS13

    tlsCfg.CipherSuites = cs

    tlsCfg.PreferServerCipherSuites = true


    srv := &http.Server{

        Addr:      *addr,

        Handler:   mux,

        TLSConfig: &tlsCfg,

    }


    log.Printf("Starting server on %s", *addr)

    err = srv.ListenAndServeTLS("", "")

    log.Fatal(err)

curl然后,通過tls1.3 curl -Lv  https://localhost:4000 --cacert /crtpath/ca.crt --tlsv1.3


我們可以找到如下https-key.txt內(nèi)容


> cat https-key.txt

CLIENT_HANDSHAKE_TRAFFIC_SECRET xxxx yyyyy

SERVER_HANDSHAKE_TRAFFIC_SECRET xxxx yyyyyyyyy

CLIENT_TRAFFIC_SECRET_0 xxxxxxx yyyy

SERVER_TRAFFIC_SECRET_0 xx yyyyyyyyyyyy

然后在 WireShark 中將 keyFile 設(shè)置為/keypath/grpc-key.txt,Preferences -> Protocols -> TLS -> (Pre)-Master-Secret log filename現(xiàn)在 Wireshark 可以進行 TLS 解密


對于 TLS1.2 測試,您可以將服務器代碼更改為tlsCfg.MinVersion = tls.VersionTLS12,然后curl通過tls1.2 curl -Lv  https://localhost:4000 --cacert /crtpath/ca.crt --tlsv1.2. 再次檢查https-key.txt,您會發(fā)現(xiàn)內(nèi)容可能是CLIENT_RANDOM xxxxxx yyyyyyyy.


查看完整回答
反對 回復 2022-12-26
?
月關(guān)寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

我弄明白了。有兩個問題:

  • 雖然Wireshark 中一些關(guān)于TLS 解密的討論提到CLIENT_RANDOM,但這僅適用于 TLS 1.2;當前的 Syncthing 一般使用 TLS 1.3,這涉及到我看到的其他秘密(、、、和CLIENT_HANDSHAKE_TRAFFIC_SECRET)——參見NSS Key Log Format 的官方文檔。SERVER_HANDSHAKE_TRAFFIC_SECRETCLIENT_TRAFFIC_SECRET_0SERVER_TRAFFIC_SECRET_0

  • 我開始捕獲的時間太晚了(因為我在等待將秘密寫入文件以便能夠?qū)⑺鼈兲峁┙o Wireshark),因此 Wireshark 缺少初始 TLS 握手,這導致錯誤識別協(xié)議為 TLS 1.2 而不是 1.3 以及無法解密流量。正確的處理方法是在 TLS 協(xié)商開始之前開始捕獲,然后在創(chuàng)建機密文件后向 Wireshark 提供機密文件。(這可能需要保存并重新加載捕獲。)

Wireshark 現(xiàn)在成功解密了 TLS 數(shù)據(jù);可以通過選擇“加密的應用程序數(shù)據(jù)”然后單擊窗口底部的“解密的 TLS”選項卡來查看它。


查看完整回答
反對 回復 2022-12-26
  • 2 回答
  • 0 關(guān)注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號