go语言tls1.3密码套件修改研究
有些浏览器可以看到tls的一些信息,例如
笔者看到go语言默认用的aes128,其他tls1.3实现有默认用aes256的。
go语言的tls默认tls1.3使用下列密码套件按下列顺序 TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256 并且文档中明确列出TLS 1.3 ciphersuites are not configurable(TLS 1.3密码套件是不可配置的)
笔者试了类似这个程序
package main
import (
"crypto/tls"
"fmt"
"net/http"
_ "unsafe"
)
//go:linkname defaultCipherSuitesTLS13 tls.defaultCipherSuitesTLS13
var defaultCipherSuitesTLS13 = []uint16{
tls.TLS_AES_256_GCM_SHA384,
tls.TLS_CHACHA20_POLY1305_SHA256,
}
func main() {
c := tls.Config{
MinVersion: tls.VersionTLS13,
}
s := http.Server{
Addr: ":443",
TLSConfig: &c,
}
mux := http.NewServeMux()
s.Handler = mux
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintln(w, "hello")
})
err := s.ListenAndServeTLS(`cert_path`, `key_path`)
fmt.Println(err)
}
确实一般情况下无法配置。 研究确认,修改go语言tls包的defaults.go源文件中defaultCipherSuitesTLS13可以做到其他tls1.3实现的效果 只需将原本的
var defaultCipherSuitesTLS13 = []uint16{
TLS_AES_128_GCM_SHA256,
TLS_AES_256_GCM_SHA384,
TLS_CHACHA20_POLY1305_SHA256,
}
改为
var defaultCipherSuitesTLS13 = []uint16{
TLS_AES_256_GCM_SHA384,
TLS_CHACHA20_POLY1305_SHA256,
}
Tags: