最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中TLS版本設(shè)置的實(shí)現(xiàn)步驟

 更新時(shí)間:2025年11月07日 09:52:32   作者:叨陪鯉  
文本文介紹了在Golang中配置TLS版本,包括TLS1.2和TLS1.3的支持,通過(guò)修改http服務(wù)端的TLSConfig參數(shù),可以指定最小和最大TLS版本,下面就來(lái)具體介紹一下,感興趣的可以了解一下

Golang中TLS版本設(shè)置


1. Go源碼中的TLS

最近在看Go源碼中的http框架tls實(shí)現(xiàn)框架實(shí)現(xiàn),go中的TLS實(shí)現(xiàn)了TLS1.0, TLS1.1, TLS1.2, TLS1.3 四個(gè)版本,還有SSL3.0版本, 不過(guò)代碼中已經(jīng)明確說(shuō)明不再支持SSL3.0版本。

const (
	VersionTLS10 = 0x0301
	VersionTLS11 = 0x0302
	VersionTLS12 = 0x0303
	VersionTLS13 = 0x0304

	// Deprecated: SSLv3 is cryptographically broken, and is no longer
	// supported by this package. See golang.org/issue/32716.
	VersionSSL30 = 0x0300
)

TLS 握手過(guò)程中,優(yōu)先采用TLS1.3版本,然后依次是:TLS1.2, TLS1.1, TLS1.0。 當(dāng)前網(wǎng)絡(luò)上的TLS版本正處于從TLS1.1及以下版本往TLS1.2版本上升級(jí),大多數(shù)已經(jīng)開(kāi)始使用TLS1.2版本。不過(guò)已經(jīng)有很多應(yīng)用支持TLS1.3版本,比如說(shuō)瀏覽器(包括Chrome,IE,F(xiàn)ireFox等主流瀏覽器),Postman工具、Eolinker工具等都已經(jīng)支持TLS1.3。

我最初看到的TLS握手是這樣的:

但是在看go的tls源碼時(shí),流程上報(bào)文交互有很大的差距,后來(lái)又通過(guò)斷點(diǎn)debug的方式確定了是由于TLS版本不同導(dǎo)致的,這才開(kāi)始了解TLS1.2 與 TLS1.3版本之間的異同,這里暫不介紹他們之間的關(guān)系。后來(lái)為了繼續(xù)看TLS1.2(上圖交互流程)的實(shí)現(xiàn),嘗試了各種瀏覽器、Linux中的wget, windows上的postman, eolink等,他們默認(rèn)都是采用TLS1.3版本。 

2. https服務(wù)端修改TLS支持版本

go代碼中實(shí)現(xiàn)起來(lái)非常方便,http包中提供了使用默認(rèn)配置的接口ListenAndServeTLS。它實(shí)現(xiàn)了一個(gè)默認(rèn)的Server結(jié)構(gòu)

func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error {
	server := &Server{Addr: addr, Handler: handler}
	return server.ListenAndServeTLS(certFile, keyFile)
}

其中,TLS參數(shù)配置是Server結(jié)構(gòu)中的一個(gè)成員:TLSConfig *tls.Config。因此我們只需要實(shí)現(xiàn)一個(gè)Server結(jié)構(gòu),然后配置其中的TLSConfig *tls.Config即可。

實(shí)現(xiàn)如下:

package main

import (
	"crypto/tls"
	"fmt"
	"net/http"
)

func HelloWorld(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "hello world")
}

func main() {/*默認(rèn)情況下*/
	http.HandleFunc("/", HelloWorld)

	err := http.ListenAndServeTLS(":10443", "./cert/server.crt", "./cert/server.key", nil)
	if err != nil {
		fmt.Println(err)
	}
}

func main() {/*修改TLS版本*/
	http.HandleFunc("/", HelloWorld)

	server := &http.Server{
		Addr:    ":8443",
		Handler: nil,
		TLSConfig: &tls.Config{
			MinVersion: tls.VersionTLS12,
			MaxVersion: tls.VersionTLS12,
		},
	}

	err := server.ListenAndServeTLS("./cert/server.crt", "./cert/server.key")
	if err != nil {
		fmt.Println(err)
	}
}

3. 抓包驗(yàn)證

關(guān)于Wireshark中的TLS版本顯示問(wèn)題:

wireshark標(biāo)注tls所屬版本,并不是通過(guò)當(dāng)前報(bào)文來(lái)標(biāo)注的,而是類似于會(huì)話的方式進(jìn)行標(biāo)注。

目前ClientHello報(bào)文,需要兼容TLS1.3, TLS1.2,…等多個(gè)版本,僅從ClientHello無(wú)法判斷出當(dāng)前的版本。TLS版本是在ServerHello中確定的。

TLS1.2 ServerHello報(bào)文:

TLS1.3 ServerHello報(bào)文:

從這兩張圖上應(yīng)該可以看出:TLS1.2與TLS1.3 的握手報(bào)文中version字段填充的都是0x0303,也就是TLS1.2版本,如果是TLS1.3,則是通過(guò)擴(kuò)展字段supported_version來(lái)確定的。

到此這篇關(guān)于Golang中TLS版本設(shè)置的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Golang TLS版本設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go 高效截取字符串的一些思考

    Go 高效截取字符串的一些思考

    這篇文章主要介紹了Go 高效截取字符串的一些思考,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • golang 函數(shù)返回chan類型的操作

    golang 函數(shù)返回chan類型的操作

    這篇文章主要介紹了golang 函數(shù)返回chan類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 使用 Go 管理版本的方法示例

    使用 Go 管理版本的方法示例

    這篇文章主要介紹了使用 Go 管理版本的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Go?錯(cuò)誤處理實(shí)踐總結(jié)示例

    Go?錯(cuò)誤處理實(shí)踐總結(jié)示例

    這篇文章主要為大家介紹了Go錯(cuò)誤處理實(shí)踐的總結(jié)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Golang環(huán)境搭建及打包和工具鏈詳解

    Golang環(huán)境搭建及打包和工具鏈詳解

    這篇文章主要介紹了Golang環(huán)境搭建及打包和工具鏈,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • golang 實(shí)用庫(kù)gotable的具體使用

    golang 實(shí)用庫(kù)gotable的具體使用

    使用gotable框架以實(shí)現(xiàn)在CLI命令行界面中打印表格。本文就介紹一下golang 實(shí)用庫(kù)gotable的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 在Golang中讀寫CSV文件的操作指南

    在Golang中讀寫CSV文件的操作指南

    CSV(逗號(hào)分隔值)文件是一種常見(jiàn)的數(shù)據(jù)存儲(chǔ)格式,廣泛應(yīng)用于數(shù)據(jù)導(dǎo)入、導(dǎo)出、分析和交換等場(chǎng)景,在Golang中,有許多庫(kù)和工具可以幫助我們讀取和寫入CSV文件,使數(shù)據(jù)處理變得簡(jiǎn)單而高效,本文將深入探討如何在Golang中使用標(biāo)準(zhǔn)庫(kù)以及第三方庫(kù)來(lái)讀寫CSV文件
    2023-11-11
  • Golang動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)示例

    Golang動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)示例

    動(dòng)態(tài)數(shù)組能自動(dòng)調(diào)整大小,與靜態(tài)數(shù)組不同,其大小不固定,可根據(jù)需求變化,實(shí)現(xiàn)通常依賴于數(shù)據(jù)結(jié)構(gòu)如鏈表或數(shù)組加額外信息,本文就來(lái)介紹一下Golang動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-10-10
  • Go中的Context實(shí)現(xiàn)原理以及正確使用方式

    Go中的Context實(shí)現(xiàn)原理以及正確使用方式

    在 Go 語(yǔ)言中,Context 包是一種非常常用的工具,它被用來(lái)管理 goroutine 之間的通信和取消,本文將深入探討Context 包的基本原理,包括使用場(chǎng)景、原理和一些最佳實(shí)踐,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-11-11
  • Go 每日一庫(kù)之termtables的使用

    Go 每日一庫(kù)之termtables的使用

    本文主要介紹了Go 每日一庫(kù)之termtables的使用,termtables處理表格形式數(shù)據(jù)的輸出。是一個(gè)很小巧的工具庫(kù)。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論

孟连| 班戈县| 新晃| 南陵县| 离岛区| 察哈| 手机| 永靖县| 晋宁县| 江永县| 深水埗区| 综艺| 丹阳市| 博爱县| 衡水市| 上杭县| 昆明市| 广宗县| 吉安市| 永德县| 安化县| 乌兰浩特市| 宜川县| 大埔县| 舟山市| 星子县| 贺州市| 海淀区| 嘉义市| 四子王旗| 格尔木市| 洛宁县| 湘西| 荣成市| 盐城市| 镇赉县| 陆川县| 莒南县| 桐柏县| 永顺县| 荣昌县|