func
handler(writer http.ResponseWriter, request *
http.Request) {
fmt.Fprintf(writer,
"
Golang Hello World!
"
)
func
main() {
fmt.Printf(
"
main
"
)
tlsconf :
= &
tls.Config{
InsecureSkipVerify:
true
,
MaxVersion: tls.VersionTLS12,
//
维护到配置文件
MinVersion: tls.VersionTLS12,
//
维护到配置文件
PreferServerCipherSuites:
true
,
//
维护到配置文件
tlsconf.CipherSuites = []
uint16
{
tls.TLS_AES_128_GCM_SHA256,
tls.TLS_CHACHA20_POLY1305_SHA256,
tls.TLS_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
mux :
=
http.DefaultServeMux
mux.HandleFunc(
"
/ping
"
, handler)
server :
= &
http.Server{
Addr:
"
:7076
"
,
TLSConfig: tlsconf,
Handler: mux,
fmt.Printf(
"
main1
"
)
server.ListenAndServeTLS(
"
D:\\server.crt
"
,
"
D:\\server.key
"
)
fmt.Printf(
"
main2
"
)
当注释掉Cipher部分时验证效果,可以看到很多D级别的加密算法(扫描命令 nmap -sV -p 7076 --script ssl-enum-ciphers)
使用namp验证SSL/TSL相关漏洞CVE-2015-2808,CVE-2013-2566,CVE-2014-3566,CVE-2016-2183,CVE-2015-4000,瞬时 Diffie-Hellman 公共密钥过弱 等 - 迪克推多0 - 博客园 (cnblogs.com)
TLS完全指南(三):用Go语言写HTTPS程序 - 知乎 (zhihu.com)
(36条消息) 在 Windows 上安装 NMAP_nmap windows_allway2的博客-CSDN博客
HTTPS原理以及GOLANG指定HTTPS密码套件 - lvlooo - SegmentFault 思否
一开始我尝试用postman来提交指定算法套件到服务端查看返回结果中用的密码套件是否有变化,用Wireshark来监控TLS中密码套件的交换过程,但是结果很不稳定,postman提交时套件名称无法匹配(不能有下划线=》变中横线,不能有WITH,部分算法不能有TLS,算法和数字间不能有“-”,很蛋疼没找到完整名单),而且在wireshark中存在未指定的算法套件,感觉向提交的设置部分情况不生效,返回的算法套件也不一定在我们设置的集合里边。
猜测可能postman提交方式有问题,并且golang http库内部做了其它逻辑处理,最终转换思路采用扫描测试法来验证,希望读者不要在走我的老路。