欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

go代碼中實(shí)現(xiàn)起來非常方便,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版本顯示問題:

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

目前ClientHello報(bào)文,需要兼容TLS1.3, TLS1.2,…等多個(gè)版本,僅從ClientHello無法判斷出當(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,則是通過擴(kuò)展字段supported_version來確定的。

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

相關(guān)文章

  • Go語言模擬while語句實(shí)現(xiàn)無限循環(huán)的方法

    Go語言模擬while語句實(shí)現(xiàn)無限循環(huán)的方法

    這篇文章主要介紹了Go語言模擬while語句實(shí)現(xiàn)無限循環(huán)的方法,實(shí)例分析了for語句模擬while語句的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go語言中strings和strconv包示例代碼詳解

    Go語言中strings和strconv包示例代碼詳解

    這篇文章主要介紹了Go語言中strings和strconv包示例代碼詳解 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Go語言defer語句的三種機(jī)制整理

    Go語言defer語句的三種機(jī)制整理

    在本篇文章里小編給大家分享的是一篇關(guān)于Go語言defer語句的三種機(jī)制整理,需要的朋友們學(xué)習(xí)下吧。
    2020-03-03
  • Go語言中的逃逸分析究竟是什么?

    Go語言中的逃逸分析究竟是什么?

    這篇文章主要介紹了Go語言中的逃逸,套喲究竟是什么呢?通俗來講,當(dāng)一個(gè)對(duì)象的指針被多個(gè)方法或線程引用時(shí),我們稱這個(gè)指針發(fā)生了“逃逸”。下面文章將詳細(xì)介紹Go語言中的逃逸,需要的朋友可以參考一下
    2021-09-09
  • 如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件

    如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件

    這篇文章主要介紹了使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件,這包括如何創(chuàng)建COS客戶端,如何逐頁檢索對(duì)象列表,并如何對(duì)結(jié)果排序以找到最后更新的對(duì)象,我們還展示了如何優(yōu)化用戶體驗(yàn),通過實(shí)時(shí)進(jìn)度更新和檢索多個(gè)文件來改進(jìn)程序,需要的朋友可以參考下
    2024-03-03
  • Go語言線程安全之互斥鎖與讀寫鎖

    Go語言線程安全之互斥鎖與讀寫鎖

    這篇文章主要介紹了Go語言線程安全之互斥鎖與讀寫鎖,互斥鎖是為了并發(fā)的安全,在多個(gè)goroutine共同工作的時(shí)候,對(duì)于共享的數(shù)據(jù)十分不安全,而讀寫鎖效率革命,使用鎖的時(shí)候,安全與效率往往需要互相轉(zhuǎn)換,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • Golang使用lua腳本實(shí)現(xiàn)redis原子操作

    Golang使用lua腳本實(shí)現(xiàn)redis原子操作

    這篇文章主要介紹了Golang使用lua腳本實(shí)現(xiàn)redis原子操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Go 計(jì)時(shí)器使用示例全面講解

    Go 計(jì)時(shí)器使用示例全面講解

    這篇文章主要為大家介紹了Go 計(jì)時(shí)器使用示例全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Golang中重復(fù)錯(cuò)誤處理的優(yōu)化方法

    Golang中重復(fù)錯(cuò)誤處理的優(yōu)化方法

    這篇文章主要給大家介紹了關(guān)于Golang中重復(fù)錯(cuò)誤處理優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Golang Recover處理錯(cuò)誤原理解析

    Golang Recover處理錯(cuò)誤原理解析

    Golang 中的?recover?是一個(gè)鮮為人知但非常有趣和強(qiáng)大的功能,讓我們看看它是如何工作的,以及在 Outreach.io 中如何利用它來處理 Kubernetes 中的錯(cuò)誤
    2023-12-12

最新評(píng)論